大家好,欢迎来到IT知识分享网。
使用拆分视图
在 IOS 中拆分视图是iPad特定的容器管理两个视图控制器并排,一个在左,详细视图控制器在其右侧的主视图控制器。
重要的属性
-
delegate
-
viewControllers
示例代码和步骤
1. 创建一个新的项目,并选择 Master Detail Application,而不是基于视图的应用程序,然后单击下一步,为项目名称,选择“创建”。
2. 默认情况下,创建一个简单的拆分视图控制器在主表视图。
3. 创建的文件从我们基于视图的应用程序可能有点不同。在这里,我们有以下的为我们创建的文件。
-
AppDelegate.h
-
AppDelegate.m
-
DetailViewController.h
-
DetailViewController.m
-
DetailViewController.xib
-
MasterViewController.h
-
MasterViewController.m
-
MasterViewController.xib
4. AppDelegate.h 内容如下:
#import <UIKit/UIKit.h>@interfaceAppDelegate:UIResponder<UIApplicationDelegate>@property(strong, nonatomic)UIWindow*window;@property(strong, nonatomic)UISplitViewController*splitViewController;@end
5. didFinishLaunchingWithOptions 方法在 AppDelegate.m 如下:
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions self.window =[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.MasterViewController*masterViewController =[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];UINavigationController*masterNavigationController =[[UINavigationController alloc] initWithRootViewController: masterViewController];DetailViewController*detailViewController =[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];UINavigationController*detailNavigationController =[[UINavigationController alloc] initWithRootViewController: detailViewController]; masterViewController.detailViewController = detailViewController;self.splitViewController =[[UISplitViewController alloc] init];self.splitViewController.delegate= detailViewController;self.splitViewController.viewControllers =@[masterNavigationController, detailNavigationController];self.window.rootViewController =self.splitViewController;[self.window makeKeyAndVisible];return YES;}
6. MasterViewController.h 如下:
#import <UIKit/UIKit.h>@classDetailViewController;@interfaceMasterViewController:UITableViewController@property(strong, nonatomic)DetailViewController*detailViewController;@end
7. MasterViewController.m 内容如下:
#import "MasterViewController.h"#import "DetailViewController.h"@interfaceMasterViewController(){NSMutableArray*_objects;}@end@implementationMasterViewController-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*) nibBundleOrNil {self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if(self){self.title =NSLocalizedString(@"Master",@"Master");self.clearsSelectionOnViewWillAppear = NO;self.contentSizeForViewInPopover =CGSizeMake(320.0,600.0);}returnself;}-(void)viewDidLoad {[super viewDidLoad];self.navigationItem.leftBarButtonItem =self.editButtonItem;UIBarButtonItem*addButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];self.navigationItem.rightBarButtonItem = addButton;}-(void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}-(void)insertNewObject:(id)sender {if(!_objects){ _objects =[[NSMutableArray alloc] init];}[_objects insertObject:[NSDate date] atIndex:0];NSIndexPath*indexPath =[NSIndexPath indexPathForRow:0 inSection:0];[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];}#pragma mark -TableView-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {return1;}-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {return _objects.count;}// Customize the appearance of table view cells.-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {staticNSString*CellIdentifier=@"Cell";UITableViewCell*cell =[tableView dequeueReusableCellWithIdentifier:CellIdentifier];if(cell ==nil){ cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}NSDate*object= _objects[indexPath.row]; cell.textLabel.text =[object description];return cell;}-(BOOL)tableView:(UITableView*)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath {// Return NO if you do not want the specified item to be editable.return YES;}-(void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath {if(editingStyle ==UITableViewCellEditingStyleDelete){[_objects removeObjectAtIndex:indexPath.row];[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];}elseif(editingStyle ==UITableViewCellEditingStyleInsert){// Create a new instance of the appropriate class, insert it into //the array, and add a new row to the table view.}}/* // Override to support rearranging the table view. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath: (NSIndexPath *) fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { } *//* // Override to support conditional rearranging of the table view. - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath: (NSIndexPath *)indexPath { // Return NO if you do not want the item to be re-orderable. return YES; } */-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {NSDate*object= _objects[indexPath.row];self.detailViewController.detailItem =object;NSDateFormatter*formatter =[[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];NSString*stringFromDate =[formatter stringFromDate:object];self.detailViewController.detailDescriptionLabel.text = stringFromDate;}@end
8. DetailViewController.h 内容如下:
#import <UIKit/UIKit.h>@interfaceDetailViewController:UIViewController<UISplitViewControllerDelegate>@property(strong, nonatomic) id detailItem;@property(weak, nonatomic)IBOutletUILabel*detailDescriptionLabel;@end
9. DetailViewController.m 内容如下:
#import "DetailViewController.h"@interfaceDetailViewController()@property(strong, nonatomic)UIPopoverController*masterPopoverController;-(void)configureView;@end@implementationDetailViewController#pragma mark -Managing the detail item -(void)setDetailItem:(id)newDetailItem {if(_detailItem != newDetailItem){ _detailItem = newDetailItem;// Update the view.[self configureView];}if(self.masterPopoverController !=nil){[self.masterPopoverController dismissPopoverAnimated:YES];}}-(void)configureView {// Update the user interface for the detail item.if(self.detailItem){self.detailDescriptionLabel.text =[self.detailItem description];}}-(void)viewDidLoad {[super viewDidLoad];[self configureView];}-(void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil {self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if(self){self.title =NSLocalizedString(@"Detail",@"Detail");}returnself;}#pragma mark -Split view -(void)splitViewController:(UISplitViewController*)splitController willHideViewController:(UIViewController*)viewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)popoverController { barButtonItem.title =NSLocalizedString(@"Master",@"Master");[self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];self.masterPopoverController = popoverController;}-(void)splitViewController:(UISplitViewController*)splitController willShowViewController:(UIViewController*)viewController invalidatingBarButtonItem:(UIBarButtonItem*)barButtonItem {// Called when the view is shown again in the split view, //invalidating the button and popover controller.[self.navigationItem setLeftBarButtonItem:nil animated:YES];self.masterPopoverController =nil;}@end
10. 现在,当我们运行程序,在横向模式下,我们将得到下面的输出。
11. 我们将得到下面的输出,当我们切换到纵向模式下。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,传播学习教程;
转载请注明:文章转载自:易百教程 [http://www.yiibai.com]
本文标题:iOS – Split View(分割视图)
转载请保留原文链接:http://www.yiibai.com/html/ios/2013/0901221.html
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34378.html