在TableViewController中使用TapGestureRecognizer而不是profileimage(错误的indexPath)

时间:2015-04-20 12:30:53

标签: ios objective-c xcode uitableview tableview

早上好,

我要更新我的帖子,因为我需要你的帮助(我没有解决方案)我的问题使用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。

非常感谢任何帮助。

此致

3 个答案:

答案 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];

解决问题后告诉我。