所以我有一个UItableview,我有一个ViewController。在我的ViewController中,我有3个视图(View1,View2,View3)。
我想根据UItableview中选择的单元格来决定要显示哪个视图。
所以我在uitableview中制作了3个单元格,并在每个单元格中制作了一个按钮,我通过按button1,==>声明了view1.hidden = no,view2.hidden = yes,etc ......
但它不起作用,因为我的视图在viewcontroller中,我写的这段代码是在UItableview中。所以它不明白哪些"观看"我在谈论。
所以问题是按钮和视图位于不同的位置,按钮位于UItableview中,视图位于ViewController中,我想使用按钮控制视图。
我该怎么办?
感谢帮助,谢谢!
答案 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;
}