13

セルの動作を次のように変更しようとしています: 1) セルがタップされたとき、セルにチェック マークを付けて完了としてマークする 2) 詳細開示アクセサリ ボタンがタップされたとき、セグエを実行します。3) tableView: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__);
}

deselectRowAtIndexPath はセグエをバイパスするはずですが、そうではありません。

NSLogs: a) 2012-04-29 18:50:00.848 Delivery[3148:fb03] [-[DeliveryTVC prepareForSegue:sender:]] [168] b) at 2012-04-29 18:50:01.245 Delivery[3148 :fb03] [-[DeliveryTVC tableView:didSelectRowAtIndexPath:]] [93]

「didSelect」は「prepareForSegue」の後に発生することに注意してください。

どんなヒントでも大歓迎です。

4

3 に答える 3

14

テーブルビューセルに詳細セグエが添付されていますか? 代わりに、2 つのビュー コントローラー (テーブルを含むビュー コントローラーと移動先のビュー コントローラー) の間でドラッグしてみてください。

その後、手動で実行 ( [self performSegueWithIdentifier:@"MySegue"];) しtableView:accessoryButtonTappedForRowWithIndexPath:ます。

于 2012-04-30T00:04:37.140 に答える
6

prepareForSegue で現在のテーブルビューの選択を取得する必要がある場合は、UITableViewController の tableView ivar にアクセスして取得できます。

[self tableView] indexPathForSelectedRow]
于 2012-07-02T18:01:26.137 に答える
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;

    }

}

ストーリーボードのシーク

于 2013-07-11T19:31:54.870 に答える