0

我正在尝试在我的应用程序中创建一个即将发生的事件表,但是当我选择一行时 indexPathForSelectedRow 总是返回 0。

NSArray *upcommingTitle;
NSMutableArray *upcommingSubtitle;
NSMutableArray *upcommingTime;

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)datesTable numberOfRowsInSection:(NSInteger)section
{
    return upcommingTitle.count;
}


-(UITableViewCell *)tableView:(UITableView *)datesTable cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";

    DatesCustomCell *Cell = [datesTable dequeueReusableCellWithIdentifier:cellIdentifier];

    if(!Cell)
    {
        Cell = [[DatesCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    Cell.DatesTitle.text = [upcommingTitle objectAtIndex:indexPath.row];
    Cell.DatesSubtitle.text = [upcommingSubtitle objectAtIndex:indexPath.row];
    Cell.DatesTime.text = [upcommingTime objectAtIndex:indexPath.row];

    return Cell;
}

self.datesTable.dataSource = self;
self.datesTable.delegate = self;

查看已加载

upcommingTitle = [[NSMutableArray alloc] initWithObjects:@"Title1", @"Title2", nil];
upcommingSubtitle = [[NSMutableArray alloc] initWithObjects:@"Sub1", @"Sub2", nil];
upcommingTime = [[NSMutableArray alloc] initWithObjects:@"Date1", @"Date2", nil];

但以下始终返回 0 导致“测试”标签为“Title1”

视图确实出现了

_test.text = [upcommingTitle objectAtIndex:self.datesTable.indexPathForSelectedRow.row];

谢谢你的帮助

4

4 回答 4

1

尝试在您的 didSelect 方法中推送您的另一个视图

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Here, indexpath returns the selection of cell's indexpath, so put your code here

_test.text = [upcommingTitle objectAtIndex:indexPath.row];

//then push your view 

}

更新:然后使用此代码

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier]isEqualToString:@"pushView"])
    {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        PushingViewController *pushView = [segue destinationViewController];
        pushView._test.text = [upcommingTitle objectAtIndex:indexPath.row];

    }
}
于 2013-10-01T11:11:44.057 回答
0
(void)tableView:(UITableView *)datesTable didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
_test.text = [upcommingTitle objectAtIndex:indexPath.row]; 
}

Just put this code in your application.
于 2013-10-01T11:12:47.950 回答
0

在呈现你的序列之前尽量不要取消选择单元格

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //Call This Line
    [self performSegueWithIdentifier:@"ShowMobileShopStore" sender:nil];
    //Before This
    [tableView deselectRowAtIndexPath:indexPath animated:true];        
}
于 2018-11-25T23:36:52.890 回答
0

最初的问题是:indexPathForSelectedRow 返回 0(不正确的值),

好吧,这是设计使然,来自苹果开发人员的注释,该值返回一个可以为 NULL 的 IndexPath (您所看到的)。

所以,做正确的事:

1)您需要先测试 indexPathForSelectedRow 是否为 NOT NULL

2)如果它不是NULL,那么它将包含(.row),它会给你选择的行索引,从0开始。

3) 请注意,在 indexPathForSelectedRow 为 NULL 的情况下 indexPathForSelectedRow.row 将返回零。

这是我测试过并且可以工作的代码:

if (MyTableViewList.indexPathForSelectedRow)
{
   long SelectedRow = MyTableViewList.indexPathForSelectedRow.row;
}

我希望这有帮助,

于 2019-02-09T08:59:49.443 回答