1

問題: 新しい UITableViewController クラスが作成されたときに Xcode が自動的にコメントアウトする組み込みの editButtonItem は、コメントのスラッシュ ( //) を削除すると機能しません。機能しないとは、編集ボタンがまったく表示されないことを意味します。セルをスワイプしても機能しません。

試行された解決策: 他のスタックオーバーフロー スレッドに投稿されたさまざまな回避策に従ってみましたが、役に立ちませんでした。私が見つけた投稿のほとんどは、編集ボタンが機能しないさまざまな側面 (マイナス記号が表示されないなど) について語っていますが、編集ボタンがまったく表示されない投稿はほとんど見つかりませんでした。

勘: UITableViewController が適切に実装されていないことに関係があるのではないかと思います。私はオブジェクト指向プログラミングと Objective-C の両方に非常に慣れていないため、答えが非常に基本的なものである場合は申し訳ありませんが、それは学習プロセスの一部です。どんな助けでも大歓迎です。

コード:

_ _ _ .h

#import <UIKit/UIKit.h>
#import "IndividualRecipeViewController.h"

@class BrowsePrivateRecipeViewController;

@protocol BrowsePrivateRecipeViewControllerDelegate
- (void)browsePrivateRecipeViewControllerDidFinish:(BrowsePrivateRecipeViewController *)controller;
@end

@interface BrowsePrivateRecipeViewController : UITableViewController

@property (weak, nonatomic) id <BrowsePrivateRecipeViewControllerDelegate> delegate;
@property (assign, nonatomic) NSUInteger listLength;
@property (strong, nonatomic) NSDictionary *dictionaryOfRecipes;
@property (strong, nonatomic) NSMutableArray *arrayOfRecipeNames;

// ... methods

@end

_ _ _ .m

@interface BrowsePrivateRecipeViewController ()

@end

@implementation BrowsePrivateRecipeViewController

@synthesize delegate = _delegate;
@synthesize listLength = _listLength;
@synthesize dictionaryOfRecipes = _dictionaryOfRecipes;
@synthesize arrayOfRecipeNames = _arrayOfRecipeNames;

- (void)viewDidLoad
{
    // ... code here

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

// ... other methods

アップデート:

ソースコードへのリンク

そのため、ソース コードをプロジェクト全体に投稿することにしました。複数のファイルでこの問題が発生していますが、1 つのファイルで修正できれば、残りのファイルも問題なく解決されると確信しています。

ファイルに注目してくださいBrowsePrivateRecipeViewController.m/.h.。これは、問題の最も単純な例です。

もう一度、あなたの忍耐と助けに感謝します.

ジェイソン

4

3 に答える 3

3

まず第一に、テーブルの編集にカスタム ボタンを使用することは絶対にありません。すでに組み込まれているため、不要です。

UIViewControllersを使用するだけeditButtonItemです。
ボタンを押したときに追加の操作を実行する必要がある場合は、オーバーライドして最初-setEditing:animated:に呼び出しますsuper

上記のエラーは、存在しないnavigationBarsにアクセスしようとしているために発生します。navigationItemビュー コントローラのnavigationItem.

self.navigationItem.rightBarButtonItem = self.editButtonItem;
于 2012-05-01T09:22:27.803 に答える
2

最初にボタンを作成する必要があります。これにより、編集ボタンが作成され、rightBarButtonItem スポットに追加されます。

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editTable)];
self.navigationItem.rightBarButtonItem = editButton;

次に、テーブルの編集モードをオンにするメソッドを設定する必要があります。

- (void)editTable
{
    [self.tableView setEditing:YES animated:YES];
}

アップデート:

質問をもう一度読んで、スワイプで削除したいことに気づきました。それをテーブルビューに追加するには、これらのメソッドを追加する必要があります。

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}


// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}

更新 2

__.h

@property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar;

__.m

@synthesize navigationBar;

- (void)viewDidLoad {
    //...

    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editTable)];
    self.navigationBar.navigationItem.rightBarButtonItem = editButton;
}
于 2012-05-01T01:43:28.557 に答える
1

editButtonItem オブジェクトをalloc'ing または'ing していないのに、どのようにしてそれを保持すること (等号) を期待できますか? initあなたは基本的にメッセージを nil に送信しています。

于 2012-05-01T01:34:01.650 に答える