问题:
当我删除注释斜杠(//
)时,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
更新:
所以我决定将源代码发布到我的整个项目中。我遇到了多个文件的这个问题,但是如果我把它固定在一个文件中,我很确定其余文件都会到位。
请关注文件BrowsePrivateRecipeViewController.m/.h.
这是问题最直接的例子。
再次感谢您的耐心和帮助。
此致 杰森
答案 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)
你不是alloc
或init
编辑editButtonItem对象,所以你怎么能期望保留它(等号),更不用说让它出现了?你基本上是向nil发送消息。