主细节应用程序未加载UIViewControllers

时间:2013-03-30 20:31:49

标签: ios objective-c ipad

我正在使用带有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'但没有任何反应......任何指针都非常感谢......

提前完成了......

1 个答案:

答案 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;
        }
    }