- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
customCell *cell=[tableView dequeueReusableCellWithIdentifier:@"charCell"];
if (cell == nil || (![cell isKindOfClass: customCell.class]))
{
cell=[[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"charCell"];
}
return cell;
}
我也有一个方法
-(void) printStuff
{
NSLog(@"stuff");
}
现在自定义单元格工作正常,但我需要从
访问方法printStuff- (BOOL)textFieldShouldReturn:(UITextField *)textField
位于customCell.m中
我尝过像[[self super] printStuff]
这样的东西,但我总是收到错误...
我希望我能正确解释问题
答案 0 :(得分:2)
如果textField位于您的自定义单元格中,您也可以处理customCell.m
中的textField ...事件。
如果您这样做,可以使用
中的[self printStuff];
简单地调用方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
//CustomCell.h
// ...
@interface CustomCell : UITableViewCell <UITextFieldDelegate>
{
//...
}
-(void)printStuff;
@end
//CustomCell.m
//...
-(void)printStuff
{
//...
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//...
[textField resignFirstResponder];
[self printStuff];
return YES;
}
或者如果printStuff方法在tableView类中,则可以声明协议
// CustomCell.h
@protocol CustomCellProtocol <NSObject>
-(void)printStuff:(NSString *)stuff;
@end
@interface CustomCell UITableViewCell <UITextFieldDelegate>
@property (nonatomic, assign)UIViewController<CustomCellProtocol> *parent;
// CustomCell.m
-(void)printStuff:(NSString *)stuff
{
[parent printStuff:stuff];
}
// TableViewClass.h
...
@interface TableViewClass : UITableViewController<CustomCellProtocol>
// TableViewClass.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
customCell *cell=[tableView dequeueReusableCellWithIdentifier:@"charCell"];
if (cell == nil || (![cell isKindOfClass: customCell.class]))
{
cell=[[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"charCell"];
cell.parent = self; // or with a custom setter methode
}
return cell;
}
答案 1 :(得分:1)
在customCell.h
中取1个变量,如
@property (nonatomic,strong) UIView *parent; //Assuming someview is UIView, if it is UIViewController than change UIView to id
现在采用以下方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
customCell *cell=[tableView dequeueReusableCellWithIdentifier:@"charCell"];
if (cell == nil || (![cell isKindOfClass: customCell.class]))
{
cell=[[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"charCell"];
}
cell.parent = self;
return cell;
}
现在在
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[_parent printStuff]; //Call like this.
return YES;
}
希望这有帮助,如果有任何疑问,请告诉我。
答案 2 :(得分:0)
您需要使用委托。自定义单元格init方法将采用someview的委托。对CustomCell中的textFeild设置此委托。东西链接这个 在CustomCell.h中有一个类变量
{
UIViewController *target;
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withtarget:(UIViewController *)_target;
在CustomCell.m
中- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withtarget:(UIViewController *)_target
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
target = _target;
}
//您现在可以使用此调用[target printStuff];
在someView.m cellForRow方法中,调用此init方法初始化单元格。
cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier withtarget:self ];
答案 3 :(得分:0)
制作UITableView
全球
并在-(BOOL)textFieldShouldReturn:(UITextField *)textField
添加类似:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:TheIndexPath];
[cell printStuff];