Arash Zeinoddini
Arash Zeinoddini

Reputation: 819

How can i use custom UITableViewCell and UITableView in same xib

I want to use a custom UITableviewCell with UITableView in same xib without creating a UITableViewCell class?

As you can see bellow i set the identifier for UITableViewCell and used it like this:

UITableView and UITableViewCell in same xib

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
    static NSString *CellIdentifier = @"CustomIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }

}

But Not Working?

Upvotes: 4

Views: 5711

Answers (3)

jamihash
jamihash

Reputation: 1900

Add a UITableViewCell *customCell property to your view controller (for example, your file ShowUsers.h)...

@property (nonatomic, strong) IBOutlet UITableViewCell *customCell;

and connect it to the custom cell in your xib. Then use the following code in cellForRow (for example, your file ShowUsers.m) :

if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self options:nil];
    cell = self.customCell;
    self.customCell = nil;
}

Upvotes: 3

Anand Gautam
Anand Gautam

Reputation: 2579

See..You can do like this. Here you are adding two UITableViewCell in one TableView using XIB.

In Class.h file :-

Declare one mutable array for number of cells.

      {
         NSMutableArray * sectionRows;
      }

    @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc1;
    @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc2;

In Class.m :-

    @synthesize addTvc1, addTvc2;

    - (void)viewDidLoad
      {
        [super viewDidLoad];

         sectionRows = [[NSMutableArray alloc] init];

         [sectionRows addObject:[[NSMutableArray alloc] 
                        initWithObjects:addTvc1, nil]];

         [sectionRows addObject:[[NSMutableArray alloc] 
                        initWithObjects:addTvc2, nil]];

     }

In UITableViewDelegate Method -

Add This -

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
       return [sectionRows count];
    }

   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:       
                                                      (NSInteger)section
   { 
      return [[sectionRows objectAtIndex:section] count];
   }

   - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:
                                                      (NSIndexPath  *)indexPath
  { 
      return [[sectionRows objectAtIndex:indexPath.section] 
                               objectAtIndex:indexPath.row];
  }

Along with code, In Class's XIB drop and drag two UITableViewCell which should be outside from the view and add those cells with Files Owner. It will work perfectly. Here no need to create one separate custom UITableViewCell class.

Upvotes: 0

Vishnu
Vishnu

Reputation: 2243

Yes you can do as following code

Under ViewDidLoad or ViewWillAppear

label1Array=[NSMutableArray arrayWithObjects:@"A",@"B",nil];
label2Array=[NSMutableArray arrayWithObjects:@"C",@"D",nil];
label3Array=[NSMutableArray arrayWithObjects:@"E",@"F",nil];

UITableViewDelegate

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

static NSString *CellIdentifier = @"aCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UILabel *label1=[[UILabel alloc]init];
label1.frame=CGRectMake(0,0,40,40);
label1.text=[label1Array objectAtIndex:indexPath.row];
................
[cell.contentView addSubView: label1];

UILabel *label2=[[UILabel alloc]init];
label2.frame=CGRectMake(50,0,40,40);
label2.text=[label2Array objectAtIndex:indexPath.row];
[cell.contentView addSubView: label2];

UILabel *label3=[[UILabel alloc]init];
label3.frame=CGRectMake(100,0,40,40);
label3.text=[label3Array objectAtIndex:indexPath.row];
[cell.contentView addSubView: label3];
}

Hope this Helps !!!

Upvotes: 0

Related Questions