ok, this is maybe a newbie question but i need help with it.. I have a someview.m and in it a custom cell which is defined in customCell.h and .m So in someview.m i have
if the textField is in your custom cell, you can handle the textField... events in the customCell.m
too.
if you do so, you can call the methode simply with [self printStuff];
in
- (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;
}
or if the printStuff methode is in you tableView class, you can declare a protocol
// 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;
}
Make your UITableView
global
And in -(BOOL)textFieldShouldReturn:(UITextField *)textField
add something like:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:TheIndexPath];
[cell printStuff];
You need to use delegate. Custom cell init method will take delegate of someview. To textFeild in CustomCell set this delegate. Something link this In CustomCell.h have a class variable
{
UIViewController *target;
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withtarget:(UIViewController *)_target;
In CustomCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withtarget:(UIViewController *)_target
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
target = _target;
}
// You can now use this call [target printStuff];
In someView.m cellForRow method call this init method to initialise cell.
cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier withtarget:self ];
Take 1 variable in customCell.h
like
@property (nonatomic,strong) UIView *parent; //Assuming someview is UIView, if it is UIViewController than change UIView to id
now in following method
- (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;
}
now in
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[_parent printStuff]; //Call like this.
return YES;
}
Hope this helps, Let me know in case of any query.