目标 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 (您的代码似乎是正确的。只是我在找到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 - 单击表格行并转到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章
如何使用C#和ASP.NET将数据从Gridview行解析到另一个页面
用于将行复制并粘贴到另一个工作表而不将其粘贴到页面数英里的宏
将 UISearchBar 与表视图控制器一起使用并转到另一个视图时显示问题