我有5行/单元格的tableview控制器。我只是使用NSArray为这些单元格分配文本/标题。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
static NSString *cellIdentifier=@"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.textLabel.text = [title objectAtIndex:indexPath.row];
return cell;
}
现在我希望当我选择特定单元格时,特定单元格标题/文本将传递给另一个另一个视图控制器。所以我可以像这样使用那个文本
if(cell.text=="this"){
...do this
}
有人可以帮助我或给我更好的解决方案吗?
答案 0 :(得分:0)
你想在didSelectRowAtIndexPath方法中这样做。因此,当他们选择一行时,您将推送下一个视图控制器,并使用cell.label.text作为标题初始化该viewController。基本上它看起来像这样:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NewViewController *newView = [[NewViewController alloc] init];
[self.navigationController pushViewController:newView animated:YES];
UILabel * myLabel = (UILabel *) [newView.view viewWithTag:1];
myLabel.text = [title objectAtIndex:indexPath.row];
}
假设您希望新视图中的标签与您单击的单元格的文本相等。您必须在界面构建器中将此标签的标记设置为1。
答案 1 :(得分:0)
Apple在那里Table View Programming Guide for iOS解释了如何将数据从一个视图控制器移动到另一个视图控制器。
我简短地执行:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
查看上面的链接和第3-1节“将数据传递到目标视图控制器”。
答案 2 :(得分:0)
首先,在SecondViewController中创建一个NSString属性。它应该是这样的:
@property (nonatomic, retain) NSString *lblText;
(将您喜欢的任何名称添加到变量中)。
我假设您正在使用故事板。如果没有,那么请像我们使用XIB文件一样进行导航。
现在,来到第一个视图控制器。
创建UILable属性以在tableview行上设置文本。它还可用于将值传递给下一个viewcontroller。
@property(nonatomic,retain)UILabel * lbl;
在第一个视图中,控制器的实现文件在UITableView的委托方法中编写以下代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
lbl = [cell objectAtIndex:indexPath.row];
}
现在,使用UITableview -didSelectRowAtIndexpath的委托方法。并在其中编写以下代码。
{
SecondViewController *vc = (SecondViewController *) [self.storyboard instantiateViewController:@"SecondViewController"];
vc.lblText = lbl.text;
[self.navigationController pushViewController:vc animated:YES];
}
现在。您在变量lblText中有标签值,因此您可以在第二个视图中的任何位置使用它(即新视图)。
答案 3 :(得分:0)
在另一个viewController中你必须添加一个属性
@property (nonatomic, copy) NSString *text;
在tableViewController中使用实现此方法的5个单元格
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self performSegueWithIdentifier:@"Identifier" sender:tableView];
}
和这个
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Identifier"]) {
UITableView *tableView = (UITableView *)sender;
// here is the other ViewController init
ViewController *vc =(ViewController*)segue.destinationViewController;
vc.text = [self.title objectAtIndex:[tableView indexPathForSelectedRow].row];
}
}
在另一个ViewController中,您可以执行类似
的操作- (void)viewDidLoad
{
[super viewDidLoad];
if ([text isEqualsToString:@"game"]){
Nslog(@"New Game");
}
}
希望它对你有用