2013-11-27 3 views
0

TableViewRowProtocolДелегат не получает набор из класса

#import <Foundation/Foundation.h> 

@protocol TableViewRowProtocol <NSObject> 

-(void) addRow; 

@end 

создал делегат в классе HeaderCell и вызвать метод протокола из того же

HeaderCell.h

#import <UIKit/UIKit.h> 
#import "TableViewRowProtocol.h" 

@interface HeaderCell : UITableViewCell<UITextFieldDelegate> 
@property (strong, nonatomic) IBOutlet UILabel* header; 

@property (nonatomic,assign) id<TableViewRowProtocol> rowdelegate; 

-(IBAction)add:(id)sender; 
@end 

HeaderCell.m

#import "HeaderCell.h" 
#import "MembershipsView.h" 

@implementation HeaderCell 
@synthesize header,rowdelegate; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    { 
     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
     if (self) { 
      // Initialization code 
     } 
     return self; 
    } 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
    { 
     [super setSelected:selected animated:animated]; 

     // Configure the view for the selected state 
    } 

    -(IBAction)add:(id)sender 
    { 
     [rowdelegate addRow]; 
    } 
@end 

Затем я создал объект класса HeaderCell в классе MembershipsView и установить rowdelegate как само собой, так как метод addrow в протоколе реализован в том же классе

MembershipsView .h

#import <UIKit/UIKit.h> 
#import "DoctorService.h" 
#import "DEcell.h" 
#import "HeaderCell.h" 


@interface MembershipsView : UIView <UITableViewDataSource,UITableViewDataSource,UITextFieldDelegate,UIAlertViewDelegate,TableViewRowProtocol> 

{ 
    NSMutableArray* memberships; 

} 
@property (nonatomic, assign) int edit; 
@property (nonatomic, strong) IBOutlet UITableView* membershipsTable; 
@property(nonatomic,strong) NSString* DoctorMembershipsDTO; 
@property (nonatomic,strong) HeaderCell* ObjHeaderCell; 
@property(nonatomic, assign) int selectedDoctorId; 

-(void)whenViewLoaded; 

@end 

MembershipsView.m

#import "MembershipsView.h" 

@implementation MembershipsView 
@synthesize selectedDoctorId,DoctorMembershipsDTO,edit,ObjHeaderCell; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [[[NSBundle mainBundle] loadNibNamed:@"MembershipsView" owner:self options:Nil] lastObject]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

-(void)whenViewLoaded 
{ 
    DoctorMembershipsDTO=[[NSString alloc]init]; 
    memberships=[[DoctorService sharedInstance] getMembershipsByDoctorId:selectedDoctorId]; 

} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    return memberships.count+1; 

} 


-(void)addRow 
{ 
    UIAlertView* addMembership = [[UIAlertView alloc]initWithTitle:@"Add Membership"` `message:@" " delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add", nil]; 

    addMembership.alertViewStyle = UIAlertViewStylePlainTextInput; 
    [addMembership textFieldAtIndex:0].delegate = self; 
    [addMembership show]; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if(edit == 1) 
    { 
     if (0 == indexPath.row) 
     { 

      static NSString *cellId = @"HeaderCell"; 

      ObjHeaderCell = (HeaderCell *)[tableView dequeueReusableCellWithIdentifier:cellId]; 

      ObjHeaderCell.rowdelegate=self; 
      if (ObjHeaderCell == nil) 
      { 
       NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"HeaderCell" owner:self options:nil]; 
       `ObjHeaderCell = [nib objectAtIndex:0]; 
      } 

      ObjHeaderCell.header.text = @"Memberships"; 
      return ObjHeaderCell; 
     } 
     static NSString *cellId = @"Cell"; 

     DEcell *cell = (DEcell *)[tableView dequeueReusableCellWithIdentifier:cellId]; 
     if (cell == nil) 
     { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DEcell" owner:self options:nil]; 
      `cell = [nib objectAtIndex:0]; 
     } 

     DoctorMembershipsDTO = [memberships objectAtIndex:indexPath.row-1]; 

     cell.labelText.text = DoctorMembershipsDTO; 
     return cell; 

    } 
    else 
    { 
     static NSString* CellId= @"cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; 

     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellId] ; 

     } 

     DoctorMembershipsDTO = [memberships objectAtIndex:indexPath.row]; 

     cell.textLabel.text = DoctorMembershipsDTO; 
     return cell; 
    } 
} 

@end 

Но когда я создал объект MembershipsView в HeaderCell класса, множества rowdelegate = объект MembershipsView. Затем метод набирается Пожалуйста, помогите, заблаговременно

+0

Ваш вопрос непонятен. Что вы хотите, где ваш метод делегата TableViewRowProtocol? Если вы назначаете делегат TableViewRowProtocol классу Membership, вам необходимо определить этот метод делегата в самом членстве. Возможно, вы делаете это наоборот. –

+0

Я определил rowdelegate в классе «HeaderCell», потому что я хочу, чтобы метод «addrow» вызывался при нажатии кнопки («добавить») на пользовательскую ячейку. Но мне нужна реализация метода в классе «MembershipsView». Пожалуйста, проверьте приведенный выше код. –

ответ

0

Попробуйте назначить делегата после инициализации HeaderCell.

ObjHeaderCell = (HeaderCell *)[tableView dequeueReusableCellWithIdentifier:cellId]; 
if (ObjHeaderCell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"HeaderCell" owner:self options:nil]; 
    ObjHeaderCell = [nib objectAtIndex:0]; 
} 
ObjHeaderCell.rowdelegate=self; 
+0

Я действительно попробовал. Затем делегируется, но метод не вызван. В отладке [метод делегата] просто пропущен. –

+0

попробуйте проверить rowdelegate == nil, прежде чем вы его назовете. –

+0

Именно эта проблема. Я не знаю, почему это ноль. –

Смежные вопросы