2014-05-16 46 views
-1

所以我有一个UItableview,并且我有一个ViewController。在我的ViewController中,我有3个视图(View1,View2,View3)。ios - 从另一个uitableview隐藏/取消隐藏viewcontroller中的视图

我想根据在UItableview中选择的单元格来决定要显示哪一个视图。

所以我在uitableview中创建了3个单元格,并在每个单元格中创建了一个按钮,并且我通过按下按钮1来声明==> view1.hidden = no,view2.hidden = yes等等。

但它不工作,因为我的意见是在viewcontroller和我写的代码是在UItableview。所以它不明白我在谈论哪些“观点”。

所以问题是,按钮和视图在不同的地方,按钮在UItableview中,视图在ViewController中,我想用按钮来控制视图。

我该怎么做?

帮助表示赞赏,谢谢!

+0

你可以添加你的代码? tableview是你的uiviewcontroller中的另一个视图,还是它是一个单独的tableviewcontroller? – thebiglebowski11

+0

我使用这个... https://github.com/mikefrederick/MFSideMenu – user3618204

+0

“所以它不明白我在谈论哪个”Views“。”它不会编译? – thebiglebowski11

回答

2

如果您的UITableView是您的视图控制器的成员/财产,那么您只需让您的视图控制器符合UITableViewDelegate协议。该协议定义了方法- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath,在选定单元/行后调用该方法。从那里,您可以检查indexPath以确定它是哪个单元格/行。然后,根据这些知识,您可以轻松地工作在其以往的孩子查看您有兴趣

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIView *theView; 
    switch(indexPath.row) { 
     case 0: // the first row selected 
      theView = view1; 
      break; 
     case 1: // the second row selected 
      theView = view2; 
      break; 
     // etc. 
     default: 
      break; 
    } 

    if (theView != nil) { 
     // do work 
    } 
} 
+0

好吧,也许我做这一切都是错误的,我使用这个代码... https:// github .com/mikefrederick/MFSideMenu/tree/master/Demos/MFSideMenuDemoStoryboard/MFSideMenuDemoStoryboard因此,我想重命名“SideMenuViewController.m”中的每个单元格,并让它们中的每一个在“DemoViewController.m”中显示特定的UIView。有什么帮助吗? – user3618204

+0

所以我的建议并不适用于你的情况。 当您试图在各种视图控制器之间进行通信时,您将需要做更复杂的事情。您有几个选项,但这里有两个: (1)为菜单和中央视图控制器之间的通信创建委托协议。中央视图控制器然后可以做它需要与其子女进行通信的东西。 (2)发布并订阅各种通知,将所需的有效负载放入'userInfo'字典中。 –

0

您可以使用nsnotification中心:

tableviewcontroller.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    switch(indexPath.row) { 
     case 0: // the first row selected 
      [[NSNotificationCenter defaultCenter] postNotificationName:@"viewShowChange" object:@"view0"]; 
      break; 
     case 1: // the second row selected 
      [[NSNotificationCenter defaultCenter] postNotificationName:@"viewShowChange" object:@"view1"]; 
      break; 
     default: 
      break; 
    } 

} 

您的看法控制器与隐藏的意见:

- (void)viewDidLoad { 
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc addObserver:self selector:@selector(viewShowChanged:) name:@"viewShowChanged" object:nil]; 
} 


- (void)viewShowChanged:(NSNotification *) notification 
{ 
    NSString *recieveObj = [notification object]; 
    if([recieveObj isEqualTo:@"view0]) self.view0.hidden = NO; 
    else if([recieveObj isEqualTo:@"view1"]) self.view1.hidden = NO; 
} 
+0

我从demoviewcontroller得到这个错误。m ===>'NSString'不可见[at]接口声明选择器isEqualTo:' 和... 在'ViewControllerSlider *'类型的对象上找不到属性'view0';你的意思是'观点'? 和... 无可见[在]界面“的NSString”宣布选择“isEqualTo:” 和... 属性“厂景”的类型为“ViewControllerSlider *”对象没有找到;你的意思是'观点'? – user3618204

+0

我将@标志替换为[at],两次在我最后的评论中,因为该网站没有让我评论太多的@ – user3618204