从superview中将superview方法作为目标添加到子视图的UIButton中

时间:2014-05-26 08:53:09

标签: ios objective-c uitableview

我正在开发一个应用程序,其中UITableView的所有UIViewControllers都具有UITableView的共同结构。 所以我创建了一个包含公共结构的UIViewController子类,然后我将此视图添加到UITableView

UIButton正在正常显示,但我需要将{添加到UITableViewCell的目标添加到我ViewController的自定义UIViewController中,方法写在{{1}}中。

有人可以告诉我如何实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

您需要处理程序设计才能解决此问题。但是你已经走得足够远了回去&改变你的设计。所以对你来说,更好的选择是NSNotificationCenter

对于您的情况,请执行以下操作:

  1. 在编写方法的viewController中,假设方法名称为myX-Method:(执行按钮的目标功能),然后在此控制器的viewDidLoad中添加此行。

    -(void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myX-Method:) name:@"NOTIFY_CUSTOM_BUTTON" object:nil];
    }
    
  2. 现在,在您的UITableViewCell课程中,将本地方法设置为按钮,就像我们通常所做的那样,让我们​​说,myLocalMethod:

  3. 现在在本地方法中,发布这样的通知消息。例如,我只是将当前单元格的按钮文本作为消息传递给通知。

    -(void) myLocalMethod:(UIButton *)button{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFY_CUSTOM_BUTTON" object: button.title];
    }
    
  4. 这样您就不必依赖委托了。使用通知对象在myX-Method:中收集您的值,如下所示:

    -(void)myX-Method:(NSNotification *)dict {
        NSString *buttonTitle = [dict valueForKey:@"object"];
        NSLog(@"Button Clicked : %@", buttonTitle);
    }
    

    希望这个简单的解决方案能够解决您的目的。

    请参阅here以获取示例代码。但是,在示例代码项目中,请搜索NSNotificationCenter

答案 1 :(得分:0)

您可以在tableView中将单元格委托设置为视图控制器:cellForRowAtIndexPath:

然后当在单元格内按下按钮时,您可以在单元格中的buttonPressed:方法内触发委托方法。

所以单元格调用 cell.delegate 这是viewController

在CellView.h中

@property (nonatomic, weak) id delegate;
在CellView.m中

- (void)buttonPressed:(id)sender {
    [self.delegate cellButttonPressed:sender];
}

在MyTableViewController.m

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    CellView *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.delegate = self;
    return cell;
}

- (void)cellButttonPressed:(id)sender {
//button action code here
}

答案 2 :(得分:0)

使用委托方法示例

制作UITableViewCell的子类

声明代表方法

  @protocol  CustomCellDelegate <NSObject>

-(void)btnClikced;

@end

// InterFace

@interface CustomCell : UITableViewCell

@property(nonatomic,retain) id<CustomCellDelegate> delegate;

//实施

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        UIButton *btn=[UIButton buttonWithType:UIButtonTypeContactAdd];
        [btn addTarget:self action:@selector(btnTapped) forControlEvents:UIControlEventTouchUpInside];
        self.accessoryView=btn;
    }
    return self;
}
-(void)btnTapped{
    [self.delegate btnClikced];
}
在ViewController中

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.delegate = self;
return cell;

}

- (void)btnClikced{
//button action code here
}