Add ability to assign actions for accessoryButton

This commit is contained in:
Roman Efimov
2013-03-27 16:23:27 -05:00
parent 44118c9c3a
commit cb2cec9cf5
7 changed files with 53 additions and 21 deletions

View File

@@ -30,9 +30,10 @@
@property (assign, nonatomic) UITableViewCellAccessoryType accessoryType;
@property (strong, nonatomic) UIView *accessoryView;
+ (id)itemWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType;
+ (id)itemWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView;
- (id)initWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType;
- (id)initWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView;
+ (id)itemWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType actionBlock:(void(^)(RETableViewItem *item))actionBlock;
+ (id)itemWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView actionBlock:(void(^)(RETableViewItem *item))actionBlock;
+ (id)itemWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryButtonActionBlock:(void(^)(RETableViewItem *item))accessoryButtonActionBlock;
- (id)initWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryButtonActionBlock:(void(^)(RETableViewItem *item))accessoryButtonActionBlock;
- (id)initWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryButtonActionBlock:(void(^)(RETableViewItem *item))accessoryButtonActionBlock;
@end

View File

@@ -27,22 +27,28 @@
@implementation REStringItem
+ (id)itemWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType
+ (id)itemWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType actionBlock:(void(^)(RETableViewItem *item))actionBlock
{
return [[REStringItem alloc] initWithTitle:title actionBlock:actionBlock accessoryType:accessoryType accessoryView:nil];
return [[REStringItem alloc] initWithTitle:title accessoryType:accessoryType accessoryView:nil actionBlock:actionBlock accessoryButtonActionBlock:nil];
}
+ (id)itemWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView
+ (id)itemWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView actionBlock:(void(^)(RETableViewItem *item))actionBlock
{
return [[REStringItem alloc] initWithTitle:title actionBlock:actionBlock accessoryType:accessoryType accessoryView:accessoryView];
return [[REStringItem alloc] initWithTitle:title accessoryType:accessoryType accessoryView:accessoryView actionBlock:actionBlock accessoryButtonActionBlock:nil];
}
- (id)initWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType;
+ (id)itemWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryButtonActionBlock:(void(^)(RETableViewItem *item))accessoryButtonActionBlock
{
return [self initWithTitle:title actionBlock:actionBlock accessoryType:accessoryType accessoryView:nil];
return [[REStringItem alloc] initWithTitle:title accessoryType:accessoryType actionBlock:actionBlock accessoryButtonActionBlock:accessoryButtonActionBlock];
}
- (id)initWithTitle:(NSString *)title actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView
- (id)initWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryButtonActionBlock:(void(^)(RETableViewItem *item))accessoryButtonActionBlock
{
return [self initWithTitle:title accessoryType:accessoryType accessoryView:nil actionBlock:actionBlock accessoryButtonActionBlock:accessoryButtonActionBlock];
}
- (id)initWithTitle:(NSString *)title accessoryType:(UITableViewCellAccessoryType)accessoryType accessoryView:(UIView *)accessoryView actionBlock:(void(^)(RETableViewItem *item))actionBlock accessoryButtonActionBlock:(void(^)(RETableViewItem *item))accessoryButtonActionBlock
{
self = [super init];
if (!self)
@@ -53,6 +59,7 @@
self.accessoryView = accessoryView;
self.actionBlock = actionBlock;
self.performActionOnSelection = YES;
self.accessoryButtonActionBlock = accessoryButtonActionBlock;
return self;
}

View File

@@ -32,6 +32,7 @@
@property (copy, readwrite, nonatomic) NSString *title;
@property (copy, readwrite, nonatomic) void (^actionBlock)(id item);
@property (copy, readwrite, nonatomic) void (^accessoryButtonActionBlock)(id item);
@property (assign, readwrite, nonatomic) BOOL performActionOnSelection;
@property (assign, readonly, nonatomic) BOOL canFocus;
@property (weak, readwrite, nonatomic) RETableViewSection *section;

View File

@@ -94,6 +94,8 @@
- (void)tableView:(UITableView *)tableView styleCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath item:(id)items;
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath item:(id)items;
@end

View File

@@ -192,6 +192,23 @@
[_delegate tableView:tableView didSelectRowAtIndexPath:indexPath item:item];
}
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
RETableViewSection *section = [_sections objectAtIndex:indexPath.section];
id item = [section.items objectAtIndex:indexPath.row];
if ([item respondsToSelector:@selector(setActionBlock:)]) {
RETableViewItem *actionItem = (RETableViewItem *)item;
if (actionItem.accessoryButtonActionBlock)
actionItem.accessoryButtonActionBlock(item);
}
if ([_delegate respondsToSelector:@selector(tableView:accessoryButtonTappedForRowWithIndexPath:)])
[_delegate tableView:tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
if ([_delegate respondsToSelector:@selector(tableView:accessoryButtonTappedForRowWithIndexPath:item:)])
[_delegate tableView:tableView accessoryButtonTappedForRowWithIndexPath:indexPath item:item];
}
@end
#pragma mark -

View File

@@ -54,17 +54,21 @@
section = [[RETableViewSection alloc] initWithHeaderTitle:@"Accessories"];
[_manager addSection:section];
[section addItem:[REStringItem itemWithTitle:@"Accessory 1" actionBlock:^(RETableViewItem *item) {
[section addItem:[REStringItem itemWithTitle:@"Accessory 1" accessoryType:UITableViewCellAccessoryDisclosureIndicator actionBlock:^(RETableViewItem *item) {
[weakSelf.tableView deselectRowAtIndexPath:item.indexPath animated:YES];
} accessoryType:UITableViewCellAccessoryDisclosureIndicator]];
}]];
[section addItem:[REStringItem itemWithTitle:@"Accessory 2" actionBlock:^(RETableViewItem *item) {
REStringItem *accessoryItem2 = [REStringItem itemWithTitle:@"Accessory 2" accessoryType:UITableViewCellAccessoryDetailDisclosureButton actionBlock:^(RETableViewItem *item) {
[weakSelf.tableView deselectRowAtIndexPath:item.indexPath animated:YES];
} accessoryType:UITableViewCellAccessoryDetailDisclosureButton]];
}];
accessoryItem2.accessoryButtonActionBlock = ^(RETableViewItem *item) {
NSLog(@"Accessory button in accessoryItem2 was tapped");
};
[section addItem:accessoryItem2];
[section addItem:[REStringItem itemWithTitle:@"Accessory 2" actionBlock:^(RETableViewItem *item) {
[section addItem:[REStringItem itemWithTitle:@"Accessory 2" accessoryType:UITableViewCellAccessoryCheckmark actionBlock:^(RETableViewItem *item) {
[weakSelf.tableView deselectRowAtIndexPath:item.indexPath animated:YES];
} accessoryType:UITableViewCellAccessoryCheckmark]];
}]];
// Set delegate and datasource
//

View File

@@ -30,13 +30,13 @@
RETableViewSection *section = [[RETableViewSection alloc] init];
[_manager addSection:section];
[section addItem:[REStringItem itemWithTitle:@"Forms" actionBlock:^(RETableViewItem *item) {
[section addItem:[REStringItem itemWithTitle:@"Forms" accessoryType:UITableViewCellAccessoryDisclosureIndicator actionBlock:^(RETableViewItem *item) {
[weakSelf.navigationController pushViewController:[[ControlsViewController alloc] initWithStyle:UITableViewStyleGrouped] animated:YES];
} accessoryType:UITableViewCellAccessoryDisclosureIndicator]];
}]];
[section addItem:[REStringItem itemWithTitle:@"List" actionBlock:^(RETableViewItem *item) {
[section addItem:[REStringItem itemWithTitle:@"List" accessoryType:UITableViewCellAccessoryDisclosureIndicator actionBlock:^(RETableViewItem *item) {
[weakSelf.navigationController pushViewController:[[ListViewController alloc] initWithStyle:UITableViewStylePlain] animated:YES];
} accessoryType:UITableViewCellAccessoryDisclosureIndicator]];
}]];
// Set delegate and datasource
//