editButtonItem不显示

时间:2012-05-01 01:22:58

标签: objective-c ios xcode uitableview

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

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

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

更新:

LINK TO SOURCE CODE

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

请关注文件BrowsePrivateRecipeViewController.m/.h.这是问题最直接的例子。

再次感谢您的耐心和帮助。

此致 杰森

3 个答案:

答案 0 :(得分:3)

首先,我绝对不会使用自定义按钮来编辑表格。这是不必要的,因为已经内置了一个。

只需使用UIViewController s editButtonItem 如果您必须在按下按钮时执行其他操作,请覆盖-setEditing:animated:并先致电super

上面提到的错误是由于您尝试访问不存在的navigationBar navigationItem而引起的。您应该访问视图控制器的navigationItem

self.navigationItem.rightBarButtonItem = self.editButtonItem;

答案 1 :(得分: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];
}

<强>更新

再次阅读您的问题并注意到您也想要滑动删除。您需要添加这些方法才能将其添加到tableview中。

// 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;

__。米

@synthesize navigationBar;

- (void)viewDidLoad {
    //...

    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editTable)];
    self.navigationBar.navigationItem.rightBarButtonItem = editButton;
}

答案 2 :(得分:1)

你不是allocinit编辑editButtonItem对象,所以你怎么能期望保留它(等号),更不用说让它出现了?你基本上是向nil发送消息。