0

現在、そのコントローラー実装ファイルUITableViewControllerの配列から項目のリストを表示する があります。ここで、右上にボタンを配置したいと思います。これを押すと、前のページのリストにアイテムを追加できるシンプルなページに移動します。項目の追加が完了すると、リストに戻るだけで、もう 1 つの項目が含まれています。

だから、私は私のnavigationControllerへのリードtableViewControllerと、あなたをアイテム追加ページに「プッシュ」するボタンを持っています。

メソッドを呼び出せるように、tableViewController への参照にアクセスするにはどうすればよい-(void)addNewItem:(NSString *) name;ですか?

4

2 に答える 2

1

これが私がこれをどのように行ったかの基本的な概要です。それは私にとってはうまくいきましたが、それが最善の方法であるかどうかはわかりません.他の人もきっと参加するでしょう.

「リスト ページ」(最初の UITableViewController) は、「リスト ページ」に追加するアイテムの詳細を知らせるために「ページの追加」が呼び出すデリゲートを実装します。

「リストページ」が「ページの追加」によってコールバックされると、新しいアイテムが保存され、「ページの追加」が閉じられます。

これをすべて接続するには、「リスト ページ」が「追加ページ」を作成して表示するときに、「追加ページ」selfの ivar に渡します (私は と呼びますdelegate)。それが基本的に、2つがリンクされて通信する方法です。

デリゲート用に定義するプロトコルは次のとおりです。

@protocol AddItemViewControllerDelegate
- (void)addItemViewController:(AddItemViewController *)controller 
             withNewEventName:(NSString *)eventName;
@end

「リストページ」ボタンのクリックハンドラーは次のとおりです。

- (IBAction)addItem
{
    AddItemViewController *controller = [[AddItemViewController alloc] initWithNibName:@"AddItemView" bundle:nil];
    controller.delegate = self;
    [self presentModalViewController:controller animated:YES];
    [controller release];
}

「ページの追加」からのコミットコードは次のとおりです。

if ([self.delegate respondsToSelector:@selector(addItemViewController:withNewEventName:)]) {
    [self.delegate addItemViewController:self withNewEventName:eventNameTextField.text];
}

最後に、「リスト ページ」でのデリゲート プロトコルの実装を次に示します。

- (void)addItemViewController:(AddItemViewController *)controller 
             withNewEventName:(NSString *)eventName 
{
    EventModel *newEvent = [[EventModel alloc] init];
    newEvent.name = eventName;
    [eventsList addObject:newEvent];
    [newEvent release];
    [self saveEvents];
    [self dismissModalViewControllerAnimated:YES];
}
于 2012-06-25T00:23:42.080 に答える
-1

同じ問題があり、新しいアイテムをローカル データベースに追加する必要があります。あなたの場合の質問は、あなたのテーブルビューのデータソースは何ですか? それはcoredataですか、SQLLiteですか、それとも単なるアイテムの配列ですか? ここでシングルトンクラスで解決策を見つけたのは チュートリアルです。ただし、シングルトン クラスを実装するには時間がかかります。

テーブル ビューにテキストのみを追加する場合は、alertview を使用できます。

たとえば、配列をテーブルのデータソースとして使用している場合、作成したボタンを押すたびにアラート ビューで単一のアイテムを追加できます。

最初にボタンを作成し、ボタンを接続して、ファイル所有者を使用して.xibファイルでIBActionを実行します

-

(IBAction)add:(UIButton *)sender
{

    UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"Enter Item Name"
                                                     message:@"  "   
                                                    delegate:self 
                                           cancelButtonTitle:@"Cancel"
                                           otherButtonTitles:@"OK", nil];

    UITextField *nameField = [[UITextField alloc] 
                              initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    [nameField setBackgroundColor:[UIColor whiteColor]];
    nameField.text = @"";
    nameField.tag = 100;
    [dialog addSubview:nameField];
    [nameField release];
    [dialog show];
    [dialog release];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    yourArraylist = [[NSMutableArray alloc] init];


    if([title isEqualToString:@"OK"])
    {

        UITextField* nameField = (UITextField *)[alertView viewWithTag:100];
        [yourArraylist addObject:nameField.text];

     // do additional  data source issues here 
    [self.mytableView reloadData];
}
于 2012-06-25T00:19:08.523 に答える