我正在使用XCode 4.5和ARC创建一个iPad版本的Master Detail Application。我有我的ipadmaster。h/。设置iPadDetailViewController.h/m(作为我的master)和iPadDetailViewController.h/m(作为我的detail)
当用户点击/选择iPadMaster上的行时,我试图从iPadDetailViewController加载不同的视图控制器。
在iPadDetailController.h中,我这样设置:
@property int itemNumber;
在iPadMaster.h中,我将其命名为:
@class iPadDetailViewController;
,然后继续:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController * DVC = [[DetailViewController alloc]init];
DVC.itemNumber = indexPath.row;
}
在iPadDetailViewController上,我设置了这个:
- (void)configureView
{
switch (_itemNumber) {
case 1:
{
iPadLogin *next = [[iPadLogin alloc] init];
NSMutableArray *mut = [[NSMutableArray alloc]init];
mut = [self.splitViewController.viewControllers mutableCopy];
[mut replaceObjectAtIndex:1 withObject:next];
self.splitViewController.viewControllers = mut;
break;
}
default:{
self.view.backgroundColor = [UIColor whiteColor];
}
break;
}
}
//then i called it on:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self configureView];
}
当我点击主表中的第二行时,item_number应该是1,并加载'iPadLogin',但什么也没发生…如有任何建议,不胜感激。
正如我在评论中所说的,我认为你应该从主控制器更改细节控制器。在主控制器中,你决定去哪个细节控制器(通过在表中选择一行),所以它应该是主控制器的责任来做出改变。下面的代码应该做到这一点(注意,但是,如果你为你的控制器使用故事板,那么你应该使用[self])。storyboard instantiateViewControllerWithIdentifier:@"whatever"]获取你的下一个控制器,而不是alloc init)。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 1:
{
iPadLogin *next = [[iPadLogin alloc] init];
NSMutableArray *mut = [[NSMutableArray alloc]init];
mut = [self.splitViewController.viewControllers mutableCopy];
[mut replaceObjectAtIndex:1 withObject:next];
self.splitViewController.viewControllers = mut;
break;
}
case 2:
{
AnotherVC *another = [[AnotherVC alloc] init];
NSMutableArray *mut = [[NSMutableArray alloc]init];
mut = [self.splitViewController.viewControllers mutableCopy];
[mut replaceObjectAtIndex:1 withObject:another];
self.splitViewController.viewControllers = mut;
break;
}
default:{
UIViewController *detail = self.splitViewController.viewControllers[1];
detail.view.backgroundColor = [UIColor whiteColor];
}
break;
}
}