4

iPadアプリを作成しています。ルート UITableview には、ナビゲーション コントローラーに右バー ボタン項目があります。ボタンをタップすると、ポップオーバーコントローラーが表示されます。ポップオーバーは UITableViewController です。ポップオーバーでセルをタップすると、そのセルのデータを渡してルート UITableview のセルに挿入するにはどうすればよいですか? Apple ドキュメントを検索しましたが、必要なものが見つかりませんでした。誰かが私を正しい方向に押し進めることができますか?

ルートテーブル.h

@interface Roottable : UITableViewController<PopoverDelegate>

ポップオーバー.h

    @protocol AthleteSelectPopoverDelegate <NSObject>
    @required
    -(void)selectedObject:(Object *)newObject;
    @end


@property (nonatomic, weak) id<PopoverDelegate> delegate;


    @property (readwrite, nonatomic) Object *currentObject;

@end

popover.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    _currentObject = [_objectArray objectAtIndex:indexPath.row];



    //Notify the delegate if it exists.
    if (_delegate != nil) {
        [_delegate selectedObject:_currentObject];
    }
}
4

4 に答える 4

0

プロトコルのプロパティが既にあるためdelegate、ポップオーバーコントローラー以外の名前のプロパティが必要だと思います。多分か何か。UITableViewControllerdelegateUITableViewDelegatemasterTable

次にselectedObject:、ルート UITableView の実装で、行を挿入するか、データ配列とreloadテーブルに追加できます。

おっと、私の悪い... @geraldWilliamは正しいです、UITableViewControllerにはデリゲートプロパティがありません...

あなたが持っているものはうまくいくはずです...だから、デリゲートでselectedObject:メソッドが呼び出されますか? もしそうなら、あなたはその方法で何をしますか?ルート ビューのデータ セット (配列、辞書、またはデータベース) にオブジェクトを追加し、そのテーブルビューに行を挿入 (またはデータをリロード) すると、機能するはずです。

ここに私のために働くいくつかのコードがあります。ポップオーバーからではなく、プッシュされたビューからのものですが、違いを生む理由はありません:

- (ThingStatus) thingPicker: (ThingPickerTableViewController *) thingPicker didSelectThing: (Thing *) thing {
    NSLog( @"Entering %s", __func__ );
    // Dismiss the pushed view controller (for you, the popover)
    [self.navigationController popViewControllerAnimated: YES];

    NSArray *startingList = self.currentCellObjectList;
    [self.databaseManager addThing: thing];
    NSArray *endingList = self.databaseManager.thingsForTableView;

    // Figure out the differences adding made...
    DiffResult *changes = [startingList simpleDiffWithArray: endingList];
    NSLog( @"%d deletions, %d insertions", changes.deletionCount, changes.insertionCount );
    // I only handle insertions in this code... deletions would be similar
    __block NSUInteger objIdx = 0;
    NSMutableArray *changeableThingList = [startingList mutableCopy];
    [changes.insertionIndexes enumerateIndexesUsingBlock: ^( NSUInteger idx, BOOL *stop ) {
        NSLog( @" - insert %@ at %d", [[changes.insertionObjects objectAtIndex: objIdx] name], idx );
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow: idx inSection: 0];
        [changeableThingList insertObject: [changes.insertionObjects objectAtIndex: objIdx] atIndex: idx];
        self.currentCellObjectList = changeableThingList;
        [self.tableView insertRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] withRowAnimation: UITableViewRowAnimationRight];
        ++objIdx;
    }];
    [self.databaseManager save];
    return [self.databaseManager: thingStatus];

}

于 2013-08-24T03:16:48.433 に答える