1

问题://当我删除注释斜杠( ) 时,Xcode 在创建新的 UITableViewController 类时自动注释掉的内置 editButtonItem 不起作用。不起作用我的意思是编辑按钮根本不出现。滑动单元格也不起作用。

尝试的解决方案: 我尝试遵循已在其他 stackoverflow 线程上发布的各种解决方法,但无济于事。我发现的大多数帖子都谈到了编辑按钮不起作用的各个方面(例如,没有显示减号等),但我发现很少有帖子根本没有显示编辑按钮。

预感: 我有一种预感,这可能与 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

更新:

链接到源代码

所以我决定将源代码发布到我的整个项目中。我在多个文件中遇到了这个问题,但如果我把它固定在一个文件中,我很确定其余的都会到位。

请关注文件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

您不是在编辑allocinit编辑 editButtonItem 对象,那么您怎么能期望保留它(等号),更不用说让它显示了?您基本上是在向 nil 发送消息。

于 2012-05-01T01:34:01.650 回答