我有一个UITableView,其中包含item1,item2,item3,item4等项目列表。
如果我选择item1,它将转到item1的详细视图(由DetailsViewController控制)。
我要做的是在DetailsView上添加一个名为“Next”的按钮。单击时,DetailsView将刷新并显示item2。再次单击时,它将显示item3,依此类推。
我一直在寻找实现的高低。但无济于事。
非常感谢提前!!!
答案 0 :(得分:2)
我会使表视图控制器成为详细信息视图控制器的委托。然后在详细信息视图控制器中执行以下操作:
-(IBAction) nextButtonClicked:(id)inSender {
NSDictionary *data = [delegate detailView:self nextDetailsForCurrent:myDetails];
if ( data ) [self setDetails:data];
}
你可以制作一个比这个过于简单的方法更强大的委托协议,但希望这会让你开始。
编辑:
委托没有任何固有的特殊之处。它只是一个对象,代表另一个对象做出决策。在Objective-C中,委托通常被定义为协议,尽管它曾经只是NSObject的一个类别。
创建一个这样的委托协议:
@protocol DetailDelegate <NSObject>
-(NSDictionary *) detailController:(DetailController *)sender nextDetailsForCurrent:(NSDictionary *)current;
@end
为详细视图控制器提供如下属性:
@property (nonatomic,assign) id<DetailDelegate> delegate;
请注意assign
而不是retain
。按照惯例,代理人不会被保留,即使它必须在另一个对象的生命周期内保持有效。 id表单只表示对象符合协议。
当表视图控制器创建详细信息视图控制器时,它将自己设置为委托。