我正在使用带有ARC的XCode 4.5创建一个iPad版的Master Detail Application。我设置了iPadMaster.h / .m(作为我的主人)和iPadDetailViewController.h / m(作为我的详细信息)。
当用户点击/选择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'但没有任何反应......任何指针都非常感谢......
提前完成了......
答案 0 :(得分:1)
正如我在评论中所说,我认为您应该从主控制器更改细节控制器。在掌握中,您要决定要使用哪个细节控制器(通过在表中选择一行),因此主控制器应该负责进行更改。下面的代码应该这样做(但是,请注意,如果您正在为控制器使用故事板,那么您应该使用[self.storyboard instantiateViewControllerWithIdentifier:@“whatever”]来获取下一个控制器而不是分配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;
}
}