我想像 uipickerview 一样使用 uitableview。单击按钮时,uitableview 出现。单击任何单元格时,所选值将显示在上一页的按钮上
5 回答
将数据传回另一个控制器的正常方法是使用delegate
协议。@protocol
带有按钮的控制器将实现在表格视图控制器的 .h 文件中的声明中声明的协议方法。在该tableView:didSelectRowAtIndexPath:
方法中,您将调用委托方法,传递单击的单元格的值。
就用这个
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell=[self.m_TableView cellForRowAtIndexPath:indexPath];
AppDelegate* appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.m_SavedDictionary setObject:cell.textLabel.text forKey:@"driver"];
[self.navigationController popViewControllerAnimated:YES];
}
以及之前视图使用的 ViewwillAppear 方法;
if([[appDelegate.m_SavedDictionary objectForKey:@"driver"]length]>=1)
{
[m_driverButton setTitle:[appDelegate.m_SavedDictionary objectForKey:@"driver"] forState:UIControlStateNormal];
}
而已。
一些委托代码;您的 tableview 类中的协议:@protocol SelectionDelegate <NSObject>
-(void)setSelectedTableCellValue:(NSString*)value;@end
让您以前的视图确认并成为您希望显示的 tableview 的委托,并实现协议方法。现在在单元格选择中,只需检索单元格的值并通过[delegate setSelectedTableCellValue:<some cell value>];
HTH 将其传递给您的委托。
rdelmar 是正确的,最简单的方法可能是使用委托协议并将选定的值传递回前一个视图。
--
但是,假设您想将此值存储在表视图和选择器之外,您可以创建一个单例或使用 NSUserDefaults 来避免传递该值并可能丢失一些东西。如果这个 tableview/picker 在设置菜单等中,这就是我会做的。
请参阅此了解基础知识:http: //mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/
您可能想查看核心数据,您将能够保存数据并重新访问数据/值并重新加载到您喜欢的任何视图控制器中。它是一个非常通用的工具,一旦你学会了它,你就可以更轻松地做很多事情。看看这个教程