indexPathForSelectedRow始终为选定的部分和行返回0

时间:2014-08-07 12:54:42

标签: ios objective-c uitableview

我正在使用UITableViewCell开发iOS App。 点击UITableViewCell并转到另一个segue的屏幕时,indexPathForSelectedRow始终为所选的部分和行返回0。

我的代码正在关注。

你能告诉我如何解决这个问题吗?

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

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if(section == 0) {
         return 3;
     }
     else if(section == 1) {
         return 2;
     }
     return 0;
 }

 - (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     return 50.0;
 }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     NSString *cellIdentifer = @"editCell";

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifer forIndexPath:indexPath];

    if(cell==nil){
         cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifer];
    }

    UITextView *editText = (UITextView *)[cell viewWithTag:1];

    if(indexPath.section == 0) {
       if(indexPath.row == 0) {
        editText.text = @"aaa";
       } else if(indexPath.row == 1){
        editText.text = @"bbb";
       } else {
        editText.text = @"ccc";
       }
    }
    else if(indexPath.section == 1) {
       if(indexPath.row == 0) {
           editText.text = @"ddd";
       } else if(indexPath.row == 1){
           editText.text = @"eee";
       }
   }

   return cell;
 }

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
    if ([[segue identifier] isEqualToString:@"editDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSLog(@"a%d",indexPath.section);
        NSLog(@"b%d",indexPath.row);
 }

2 个答案:

答案 0 :(得分:1)

查看您的代码,您将失踪;

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

执行此方法的转换,您可以直接访问indexPath

答案 1 :(得分:0)

您可能已在代码中的某处取消选择行。最有可能采用didSelectRowAtIndexPath方法。取消选择刚刚选择的行是一种常见做法。如果取消选择该行,当您尝试获取indexPath.row时,这将导致您在prepareForSegue方法中获得0。