0

タブ コントローラーをルート ビュー コントローラーとして使用するタブ ビュー アプリケーションがあります。私が持っているビューの1つは、すべてのセルを編集可能にし、セルを追加できるようにする追加/編集ボタンをクリックして編集できるようにしたいテーブルビューです。

テーブル ビューにナビゲーション バーを追加し、次のコードを使用してバーにボタンを作成しようとしました。このボタンを押すと、すべてのセルが編集可能になります。

- (void)viewDidLoad {
[super viewDidLoad];

UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
                               initWithTitle:@"Delete"
                               style:UIBarButtonItemStyleBordered
                               target:self
                               action:@selector(toggleEdit:)];
self.navigationItem.rightBarButtonItem = editButton;          

}


-(IBAction)toggleEdit:(id)sender {

    [self.mTableView setEditing:!self.mTableView.editing animated:YES];

    if (self.mTableView.editing) 
        [self.navigationItem.rightBarButtonItem setTitle:@"Done"];
    else
        [self.navigationItem.rightBarButtonItem setTitle:@"Delete"];

}

コードが機能せず、ナビゲーション バーにボタンが生成されません。ナビゲーション コントローラーを使用する必要があることを読みましたが、この 1 つのページ (タブ ビュー アプリで) を使用する場合、タブ バーが選択オプションとしてナビゲーション コントローラーを指すようにするにはどうすればよいですか?

----更新----- OK Ive は、ルート ビュー コントローラー (タブ バー コントローラー) を含む nib ファイルを作成しました。タブ バー コントローラーには、2 つのビュー コントローラーと、ビュー コントローラーを含むナビゲーション コントローラーが含まれています。ナビゲーション コントローラーのビュー コントローラーを、テーブルビューを含むビューにリンクします。プログラムを実行してテーブルビューのタブをクリックしようとすると、次のエラーが表示されます。

2012-04-29 17:23:28.116 ash[6778:f803] -[UIViewController tableView:numberOfRowsInSection:]: インスタンス 0x68bb8d0 に送信された認識されないセレクター 2012-04-29 17:23:28.117 ash[6778:f803] *アプリの終了キャッチされない例外 'NSInvalidArgumentException' のため、理由: '-[UIViewController tableView:numberOfRowsInSection:]: 認識されないセレクターがインスタンス 0x68bb8d0 に送信されました'

テーブルビューを含む私のView Controllerは、実装するUIViewControllerです

その m ファイルには、次のメソッドが含まれています。

    #pragma mark -
    #pragma mark Table View Data Source Methods

    - (NSInteger)tableView:(UITableView *)tableView
     numberOfRowsInSection:(NSInteger)section {
        return [self.portfolioArray count];
     }

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

       static NSString *SimpleTableIdentifier = @"CellTableIdentifier";
      static BOOL nibsregistered = NO;
      if (!nibsregistered) {
      UINib *nib = [UINib nibWithNibName:@"ASHInstrumentCell" bundle:nil];
      [tableView registerNib:nib forCellReuseIdentifier:SimpleTableIdentifier];
      nibsregistered = YES;
     }

     ASHInstrumentCell *cell = [tableView dequeueReusableCellWithIdentifier:
                         SimpleTableIdentifier];


      NSUInteger row = [indexPath row];

     cell.type.text = [portfolioArray objectAtIndex:row];

     return cell;
    }


    #pragma mark -
    #pragma mark Table Delegate Methods


    - (void)tableView:(UITableView *)tableView
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger row = [indexPath row];
    NSString *rowValue = [portfolioArray objectAtIndex:row];

    NSString *message = [[NSString alloc] initWithFormat:
                     @"You selected %@", rowValue];
    UIAlertView *alert = [[UIAlertView alloc]
                         initWithTitle:@"Row Selected!"
                         message:message
                         delegate:nil
                         cancelButtonTitle:@"Yes I Did"
                         otherButtonTitles:nil];
    [alert show];

   [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }

 - (void)tableView:(UITableView *)tableView commitEditingStyle:                (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
        NSUInteger row = [indexPath row]
        [self.portfolioArray removeObjectAtIndex:row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]                 withRowAnimation:UITableViewRowAnimationAutomatic] ;
        }

私は何を間違っていますか?

4

2 に答える 2

0

Two points: First of all, a UINavigationController is a subclass of UIViewController, so you could create an instance of UINavigationController whose rootViewController is your tableViewController, and have the TabBarController manage the nav controller as one of its tabs.

Also note that the UIViewController class already has a editButtonItem property that you should use instead of creating your own button:

 self.navigationItem.rightBarButtonItem = self.editButtonItem;
于 2012-04-28T21:11:20.647 に答える
0

わかりました、私は自分が間違っていたことを理解したと思います。タブビューコントローラー用のnibファイルを作成し、これにビューコントローラーとナビゲーションコントローラー(それ自体にテーブルビューコントローラーが含まれていました)を追加しました。

私がしなかったことの 1 つは、正しいクラス タイプをタブのビュー コントローラーに割り当てることでした。IBOutlets を持つカスタム ビュー コントローラー クラス firstviewcontroller を作成し、タブ コントローラー nib でビュー コントローラーをクラス firstviewcontroller に指定しなかった場合、奇妙なキー値エラーが発生します。

私が抱えていた2番目の問題は、次のコードを使用して、表示したいすべてのビューで自動回転が許可されていても、タブビューコントローラーが自動回転しないことでした:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        // Return YES for supported orientations
     return YES;
    }

この理由は、(私の tabbedviewcontroller nib ファイルで) ビュー コントローラーのそれぞれのクラスを、表示させたいカスタムメイドのクラスとして指定していなかったためです。

クラスタイプを指定すると、すべてがうまくいきました。

于 2012-04-29T19:30:51.683 に答える