如何使用委托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:ViewControllerAUITableView(带有 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?的主要内容,如果未能解决你的问题,请参考以下文章

创建一个对象作为委托 - Objective C

扩展现有协议以修改 Objective C 中的委托参数

如何在应用程序委托iOS10 Objective C中的applicationWillEnterForeground方法中以模态方式呈现UIViewController

Objective c委托自我释放

从数组向 UITable 添加行

从 UITable 中获取 UICollectionView 的 indexPath