2012-04-29 17 views
13

Tôi đang cố gắng thay đổi hành vi ô thành: 1) Khi di động được khai thác, hãy đánh dấu ô là hoàn thành bằng dấu kiểm 2) Khi nút Chi tiết tiết lộ được khai thác, thực hiện Segue. 3) Trong tableView: didSelectRowAtIndexPath: Tôi có:trong ứng dụng iOS, tại sao PrepareForSegue xảy ra trước khi didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    AWDelivery *delivery = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    [delivery toggleDelivered: delivery]; 
    [self configureCheckmarkForCell:cell withDelivery:delivery]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    if (debugging) NSLog(@"[%s] [%d]", __PRETTY_FUNCTION__, __LINE__); 
} 

các deselectRowAtIndexPath là nghĩa vụ phải vượt qua segue, nhưng nó không phải.

NSLogs: a) lúc 2012-04-29 18: 50: 00.848 Phân phối [3148: fb03] [- [DeliveryTVC prepareForSegue: sender:]] [168] b) lúc 2012-04-29 18: 50: 01.245 Phân phối [3148: fb03] [- [Bảng phân phốiTVCXem: didSelectRowAtIndexPath:]] [93]

lưu ý rằng 'didSelect' xảy ra sau 'PrepareForSegue'.

Mọi gợi ý sẽ được đánh giá cao nhất.

+0

bạn có thể vui lòng chia sẻ mã của bạn. Tôi có cùng một vấn đề. Cảm ơn. – applefreak

+0

Rất ngẫu nhiên nhưng từ ví dụ mã của bạn, tôi đã tìm hiểu về các macro '__PRETTY_FUNCTION__' và' __LINE__'. Cảm ơn! – Guven

Trả lời

14

Bạn có phân tách chi tiết của mình được đính kèm với ô xem bảng không? Thay vào đó, hãy thử kéo nó giữa hai bộ điều khiển khung nhìn (bảng điều khiển chứa bảng và nơi bạn muốn nó đi).

Sau đó, thực hiện thủ công ([self performSegueWithIdentifier:@"MySegue"];) khi tableView:accessoryButtonTappedForRowWithIndexPath:.

+1

Ngay trên tiền !!!!!!! Đó là factoid ít nên rõ rệt hơn. – JJW

+0

Bạn có thể vui lòng thêm một số mã để thực hiện theo cách thủ công vui lòng không! Tôi có một vấn đề tương tự, nơi tôi muốn vượt qua thông tin di động để điều khiển xem tiếp theo. Bạn có nghĩa là thực hiện trình bày phương thức viewcontroller phương thức thủ công hoặc phương thức preparforsegue? Cảm ơn. – applefreak

+1

Chắc chắn, bất cứ khi nào bạn cần vào bộ điều khiển xem, hãy nói: [self performSegueWithIdentifier: @ "MySegue"]; chuỗi đó phải khớp với số nhận dạng bạn thiết lập cho segue trong IB. Hãy cho tôi biết nếu bạn cần thêm chi tiết. – danh

6

Nếu bạn cần có được lựa chọn xem bảng hiện tại trong PrepareForSegue, bạn có thể lấy nó bằng cách truy cập bảng của UITableViewController.

[self tableView] indexPathForSelectedRow] 
+0

Nhấn vào nút phụ kiện không chọn ô, vì vậy indexpath.row không tương ứng với ô chính xác của phụ kiện được nhấn. – swampf0etus

1
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"ClaimDetailsSeque"]) 
    { 
     DLog(@"destinationViewController %@",[[segue destinationViewController] topViewController]); 
     //This syntax is needed when the seque is going through a Navagation Controller 
     ClaimDetailsFormViewController* vc = (ClaimDetailsFormViewController*)[[segue destinationViewController] topViewController]; 

     //This the the way to get the object from the selected row via the FetchedResultsController 
     //this is needed because prepareForSegue is called before didSelectRowAtIndexPath 
     NSIndexPath *selectedIndexPath = [self->claimTableView indexPathForSelectedRow]; 
     ClaimHistory *object = [[self claimHistoryFetchedResultsController] objectAtIndexPath:selectedIndexPath]; 

     MyClaimHistorySM *myCH = [MyClaimHistorySM new]; 

     myCH.policyNumber = object.policyNumber; 
     myCH.policyStatus = object.policyStatus; 
     myCH.claimNumber = object.claimNumber; 
     myCH.insuredName = object.insuredName; 
     myCH.lossDescription = object.lossDescription; 
     myCH.dateOfLoss = object.dateOfLoss; 
     myCH.incidentCloseDt = object.incidentCloseDt; 

     vc.claimHistorySM = myCH; 

    } 

} 

Seque on Storyboard

+0

Khoảng cách được tạo bằng IB bằng cách chọn Ô xem bảng và kéo trình kết nối "Lựa chọn phân đoạn được kích hoạt" vào Trình điều khiển điều hướng. –

Các vấn đề liên quan