目标 c - 单击表格行并转到另一个页面

Posted

技术标签:

【中文标题】目标 c - 单击表格行并转到另一个页面【英文标题】:objective c - click table row and go to another page 【发布时间】:2015-06-16 06:59:21 【问题描述】:

我想用户点击表格行,然后用户将转到其他页面。该页面具有情节提要 ID“其他视图”和恢复 ID“其他视图”。 但我不能去有目的的看法

这是我的代码:

 - (UITableViewCell *)tableView:(UITableView *)tabel cellForRowAtIndexPath:(NSIndexPath *)indeksBaris


    static NSString *simpleTableIdentifier = @"TampilanCell";
    TabelBeritaCell *cell = (TabelBeritaCell *)[tabel dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    NSLog(@"nilai : %d", indeksBaris.row );
    //detecting NIB of table view
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableView" owner:self options:nil];
    cell = [nib objectAtIndex:0];

    //Go To View Controller which have identifier "Other View"
    UIViewController *otherViewCon;
    otherViewCon = [self.storyboard instantiateViewControllerWithIdentifier:@"Other View"];
    [self.navigationController pushViewController:otherViewCon animated:YES];

    cell.judulBerita.text =  [listBerita objectAtIndex:indeksBaris.row];

    return cell;

此代码不起作用:

UIViewController *otherViewCon;
otherViewCon = [self.storyboard instantiateViewControllerWithIdentifier:@"Other View"];
[self.navigationController pushViewController:otherViewCon animated:YES];

更新 我已插入新代码。我使用 didSelectRowAtIndexPath 方法,但它不起作用:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
        UIViewController *otherViewCon;
        otherViewCon = [self.storyboard instantiateViewControllerWithIdentifier:@"Other View"];
        [self.navigationController pushViewController:otherViewCon animated:YES];
    

【问题讨论】:

显示 didSelectRowAtInedxPath 方法的代码 不,我没用过那个方法。我先试试…… 你为什么不试试我在我的回答中写的:[self performSegueWithIdentifier:@"ShowDetail" sender:tableView];你不需要创建一个新的 UIViewController 请阅读 tableview 委托方法,以便您了解哪种方法有用。 @andika_kurniawan,你检查过,你的didSelectRowAtIndexPath 被调用了吗? 【参考方案1】:

试试didSelectRowAtIndexPath的方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    [self performSegueWithIdentifier:@"ShowDetail" sender:tableView];

如果您想在变量 segue 之前传递变量或执行操作,请执行以下操作:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([segue.identifier isEqualToString:@"ShowDetail"]) 
        //Do something
        Detail *detailController = (Detail*)segue.destinationViewController;
    

如果你想知道如何命名一个 segue,这里有一个来自苹果文档的很棒的教程:Naming Segues

【讨论】:

此代码有效。但我有错误“'NSInvalidArgumentException',原因:'Receiver () has no segue with identifier 'Other View'” 实际上,我已经在名为“Other View”的视图中创建了 Storyboard ID 和 Restoration ID 在情节提要中选择segue,然后在右上角的按钮处命名segue。这是一个关于命名segues的好教程:developer.apple.com/library/ios/recipes/… 别抱歉!!我们都去过那里!!如果这给出了正确的答案,请告诉我 我认为这篇文章的反对者只是嫉妒你是一个女人,你可以编码 :) 无论如何,我认为这篇文章很好,所以我会投票。 谢谢!!赞一个!!【参考方案2】:

您的代码似乎是正确的。只是我在找到UIStoryboard object 时觉得有问题。替换以下内容可能会正常工作。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
        UIViewController *otherViewCon;
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"your_storyboard_name" bundle:nil];// like Main.storyboard for used "Main"
        otherViewCon = [storyboard instantiateViewControllerWithIdentifier:@"Other View"];
        [self.navigationController pushViewController:otherViewCon animated:YES];

【讨论】:

我不认为@andika_kurniawan 想要以语法方式创建一个新的viewController。我认为问题只是在继续。 @Jessica,我没有创建新的 viewController。我只是以编程方式获取已经存在的 viewController 的引用。 糟糕。你是对的!!但是你为什么要创建一个新的故事板? 我再次参考了已经存在的 UIStoryboard .. :)【参考方案3】:

你应该在

中编写导航代码
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

这个方法。

或者你也可以直接在storyboard中画push segue去另一个view controller,不用写代码。

How to make a push segue when a UITableViewCell is selected

【讨论】:

从表格视图中绘制推送序列?我做不到!如果元素是按钮,我只能绘制。 如果您在选择任何行后进入同一页面,那么您可以从您的表格中绘制 push segue。 查看答案点击链接希望对您有帮助【参考方案4】:
 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


      NSString * storyboardIdentifier = @"storyboardName";// for example "Main.storyboard" then you have to take only "Main"
      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: [NSBundle mainBundle]];
      UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"secondVCStoryboardID"];
     [self presentViewController:UIVC animated:YES completion:nil];

【讨论】:

【参考方案5】:

试试这个对你有帮助。 didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  
  if(indexpath.row==0)//means you click row 0 
   
     UIViewController *otherView=[self.storyboard instantiateViewControllerWithIdentifier:@"otherview"];
        [self presentViewController:otherView animated:YES completion:nil];
   
  else
   
     UIViewController *detailView=[self.storyboard instantiateViewControllerWithIdentifier:@"detailView"];
        [self presentViewController:detailView animated:YES completion:nil];
   

【讨论】:

【参考方案6】:

这里的 showDataVC 是我的第二个 ViewController 的新文件名。 首先创建一个新文件的对象并初始化。 并用对象初始化 showDataVC 以使用 pushviewcontroller 中的对象。

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    showDataVc *objshowDataVc = [self.storyboard instantiateViewControllerWithIdentifier:@"showDataVc"];

    [self.navigationController pushViewController:objshowDataVc animated:YES];

【讨论】:

【参考方案7】:

didSelectRowAtIndexPath 方法中实现您的代码。并且在你在这里提出问题之前,请在编写代码和研究之前阅读文档。

【讨论】:

以上是关于目标 c - 单击表格行并转到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

literalr控件 -- 提示并转到另一个页面

如何使用C#和ASP.NET将数据从Gridview行解析到另一个页面

用于将行复制并粘贴到另一个工作表而不将其粘贴到页面数英里的宏

将 UISearchBar 与表视图控制器一起使用并转到另一个视图时显示问题

如何将 Dojo Data 网格单元格值重定向到另一个页面?

TableView 单元格单击到另一个 TableView