0

我有一个 Master-Detail 应用程序,我想在单击 Master 中的行时加载一个新视图。如果我选择第 1 行,则视图不同,并且在选择不同的行时,新视图将显示在详细信息部分。我怎样才能做到这一点?

我正在做这样的事情。问题是 - 如果我第一次选择这 2 行中的任何一行,视图实际上会发生变化。但是当我再次单击另一行时,它并没有改变。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

if(indexPath.row==0){


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

    TwitterTweetViewController *detailView=(TwitterTweetViewController *)[storyboard instantiateViewControllerWithIdentifier:@"TwitterDetailView"];

    self.splitViewController.mainViewController = detailView;
    [self.splitViewController.mainViewController viewDidLoad];
    [self.splitViewController viewDidLoad];

}


if(indexPath.row == 1)
{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

    TwitterDetailViewController *detailView=(TwitterDetailViewController *)[storyboard instantiateViewControllerWithIdentifier:@"TwitterDetailView"];

    self.splitViewController.mainViewController = detailView;
    [self.splitViewController.mainViewController viewDidLoad];
    [self.splitViewController viewDidLoad];

}

}

我应该怎么做才能更改选择这些行的视图?

4

3 回答 3

0

有一个很棒的方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

用它。在单击单元格后立即调用它。你可以在那里做一些检查。简短的例子:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  if (indexPath.row == 0) {
    SomeViewController *svc = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:nil];
    [self.navigationController pushViewController:svc];
  } else if (indexPath.row > 0 && indexPath.row < 5) {
    SomeOtherViewController *sovc = [[SomeOtherViewController alloc]initWithNibName:@"SomeOtherViewController" bundle:nil];
    [self.navigationController pushViewController:sovc];
  } else {
    AnotherViewController *avc = [[AnotherViewController alloc]initWithNibName:@"AnotherViewController" bundle:nil];
    [self.navigationController pushViewController:avc];
  }
  //some other code if needed
}

希望能帮助到你

于 2012-05-14T07:27:40.737 回答
0

您可以创建视图控制器的枚举:-

enum MyViewControllers
{
viewcontroller1
viewcontroller2
viewcontroller3
}

枚举中的常量将对应于每个 indexPAth 的视图控制器。

然后在 UITableVIew didSelectRowAtIndexPath: 的委托方法中,使用 switch case :-

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
    {
    switch(indexPath.row)
{
    case 1:
          Load view1
          break;
    case 2:
          Load view2
          break;
    case 3:
          Load view3
          break;     .
         .
         so on.
    }
}

或者在不同的 NavigationControllers(如 iPad 中)的情况下,您将不得不使用委托和协议传递数据。在 rootViewController 中定义协议,然后在细节中设置其委托(您想要推送视图控制器的位置)

就像是 :-

@protocol SendSelectedINdexDelegate
{
@required
-(void)sendTheIndex:(NSNumber)number.
@end

在界面中

id <SendSelectedINdexDelegate> delegateSend

设置它的属性:-

@property (nonatomic) id delegateSend;

@synthesize delegateSend

在 didSelectRowAtIndexPath 中:-

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
[self delegate]sendTheIndex:indexPath.row];

}

在接收控制器符合协议并设置

rootview.delegateSend=self;

并实现协议的方法;

-(void)sendTheIndex:(NSNumber)number
{
//nsnumber is your index perform operation based on this.
}
于 2012-05-14T07:35:25.397 回答
0

请注意,如果您使用 ARC,它会禁止合成具有未指定所有权属性的属性(在 .m @synthesize delegateSend 中)。

于 2014-01-31T09:54:42.343 回答