如何使用委托Objective c从UITableViewCell.xib创建到ViewController的segue?
Posted
技术标签:
【中文标题】如何使用委托Objective c从UITableViewCell.xib创建到ViewController的segue?【英文标题】:How create segue to ViewControllerB from TableViewCell.xib using delegates Objective c? 【发布时间】:2016-12-26 07:38:20 【问题描述】:我正在学习, 真的需要帮助!
我有 2 个 ViewController:ViewControllerA
和 UITableView
(带有 TableViewCell .h .m .xib
文件)和 ViewControllerB
。
我在CustomCell
中有“连接按钮”- (IBAction)goButton:(id)sender;
。
如何使用委托从TableViewCell
转到ViewControllerB
?
TableViewCell.h
#import <UIKit/UIKit.h>
@class TableViewCell;
@protocol TableViewCellDelegte <NSObject>
@required
- (void) customCell:(TableViewCell *)cell button1Pressed:(UIButton *)btn;
@end
@interface TableViewCell : UITableViewCell
- (IBAction)Button:(id)sender;
@property (weak, nonatomic) id<TableViewCellDelegte>delegate;
@end
TableViewCell.m
#import "TableViewCell.h"
@implementation TableViewCell
@synthesize delegate;
- (void) customCell:(TableViewCell *)cell button1Pressed:(UIButton *)btn;
- (IBAction)Button:(id)sender
ViewControllerA.h
#import <UIKit/UIKit.h>
#import "TableViewCell.h"
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate,TableViewCellDelegte>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, assign) id delegate;
@end
ViewControllerA.m
#import "ViewController.h"
#import "TableViewCell.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize delegate;
- (void)viewDidLoad
[super viewDidLoad];
[self setAllTableData];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.backgroundColor = [UIColor redColor];
_tableView.rowHeight = 100;
- (void) setAllTableData
//[_tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"TableViewCell"];
UINib *cellNib = [UINib nibWithNibName:@"TableViewCell" bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"TableViewCell"];
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
return 1;
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return 1;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewCell"];
//static NSString *CellIdentifier = @"TableViewCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TableViewCell" forIndexPath:indexPath];
if (!cell)
cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TableViewCell"];
cell.delegate = self;
return cell;
- (void) customCell:(TableViewCell *)cell button1Pressed:(UIButton *)btn
NSLog(@"DELEGATE IS WORK");
@end
错误:在“UITableViewCell *”类型的对象上找不到cell.delegate = self;
Property 'delegate'
【问题讨论】:
【参考方案1】:如下更新您的代码:
CustomCell.h
#import <UIKit/UIKit.h>
@interface TableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIButton *btnSegue; //Connet this button outlet to your cell in storyboard
@end
CustomCell.m
#import "TableViewCell.h"
@implementation TableViewCell
- (void)awakeFromNib
[super awakeFromNib];
ViewControllerA.m
cellForRowAtIndexPath:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *MyIdentifier = @"CellIdentifier";
TableViewCell *cell = (TableViewCell *) [tableView dequeueReusableCellWithIdentifier:MyIdentifier forIndexPath:indexPath];
[cell.btnSegue addTarget:self action:@selector(yourSegue:) forControlEvents:UIControlEventTouchUpInside];
//If you want some data to get fetch from cell so use this tag concept
cell.btnSegue.tag = indexPath.row;
return cell;
-(void)yourSegue:(UIButton *)btn
//Write your segue code here
int tag = btn.tag;
//Use above tag to get data which is on your selected cell
【讨论】:
以上是关于如何使用委托Objective c从UITableViewCell.xib创建到ViewController的segue?的主要内容,如果未能解决你的问题,请参考以下文章
如何在应用程序委托iOS10 Objective C中的applicationWillEnterForeground方法中以模态方式呈现UIViewController