ios - 从另一个uitableview隐藏/取消隐藏viewcontroller中的视图

时间:2014-05-16 14:12:27

标签: ios objective-c uitableview

所以我有一个UItableview,我有一个ViewController。在我的ViewController中,我有3个视图(View1,View2,View3)。

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

所以我在uitableview中制作了3个单元格,并在每个单元格中制作了一个按钮,我通过按button1,==>声明了view1.hidden = no,view2.hidden = yes,etc ......

但它不起作用,因为我的视图在viewcontroller中,我写的这段代码是在UItableview中。所以它不明白哪些"观看"我在谈论。

所以问题是按钮和视图位于不同的位置,按钮位于UItableview中,视图位于ViewController中,我想使用按钮控制视图。

我该怎么办?

感谢帮助,谢谢!

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

您可以使用nsnotification center:

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