早上好,
我要更新我的帖子,因为我需要你的帮助(我没有解决方案)我的问题使用TapGestureRecognizer。
这是我的Segue代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *myIndexPath = [self.tableView indexPathForSelectedRow];
if ([segue.identifier isEqualToString:@"segueprofile"]) {
OtherProfileUserViewController *destViewController = segue.destinationViewController;
NSLog(@"jsonArray ==> %@", [[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"]);
destViewController.recipeName = [[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"];
}
if ([segue.identifier isEqualToString:@"segueprofile2"]) {
OtherProfileUserViewController *destViewController = segue.destinationViewController;
NSLog(@"jsonArray ==> %@", [[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"]);
destViewController.recipeName = [[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"];
}
if ([[segue identifier] isEqualToString:@"ShowCarDetails"])
{
CarDetailViewController *detailViewController = [segue destinationViewController];
NSLog(@"jsonArray ==> %@", [[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"]);
detailViewController.carDetailModel = [[NSArray alloc]
initWithObjects:
[[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"date"],
[[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"],
[[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"imagen"],
nil];
}
}
正如你所看到的,我有一些输出来检查所选用户的ID,但它没有在第一次工作两种情况(我总是使用相同的ID),但在最后一种情况下一切正常(我认为这是因为CUSTOM ROW的“选择”。
为了使其他两个segues使用正确的信息,我需要做些什么?我已经将我的imageView(第一个segue)连接到TapGestureRecognizer,这个连接到Segue动作,第二个是相同的但是来自UILabel。
非常感谢任何帮助。
此致
答案 0 :(得分:0)
如果您阅读了UITableview的文档。 indexPathForSelectedRow 方法返回一个索引路径,用于标识所选行的行和部分,例如按钮的单击和表格单元格选择事件两个不同的事物。如按钮单击不会更新tableview的选定行和选定部分。有多种方法可以解决您的问题。我给你一个简单的解决方案。
首先在CarTableViewCell.h文件中为Like按钮创建弱插座属性(如果你没有),然后连接它。
@property (weak, nonatomic) IBOutlet UIButton *likeButton;
然后,更新方法
中的按钮标签 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)anIndexPath
{
self.selectedIndexPath = anIndexPath;
static NSString *CellIdentifier = @"carTableCell";
CarTableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CarTableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
cell.likeButton.tag = indexPath.row;
//I skiped your code.........
}
最后一步,在按钮事件中使用单元格行索引的标记。
- (IBAction)plusOne:(UIButton *)sender {
NSLog(@"%ld",(long)sender.tag);
}
答案 1 :(得分:0)
我之前遇到过你的问题,
我解决了以下问题:
为单元格指定其tag属性的值。然后获取单元格:
UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue];
然后像这样获取NSIndexPath
NSIndexPath *indexPath = [self.tableView indexPathForCell: cell];
希望它会有所帮助:)
答案 2 :(得分:0)
请在viewWillAppear方法而不是viewDidLoad
中编写此代码[self fetchJson];
[self.tableView reloadData];
// Initialize the refresh control.
self.refreshControl = [[UIRefreshControl alloc] init];
//self.refreshControl.backgroundColor = [UIColor blackColor];
//self.refreshControl.tintColor = [UIColor whiteColor];
[self.refreshControl addTarget:self
action:@selector(fetchJson)
forControlEvents:UIControlEventValueChanged];
解决问题后告诉我。