Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Outlets cannot be connected to repeating content iOS 5

I am new to iOS i am working on uitableview cell i had drag and drop the button to table view cell from objects inspector. but when i am making its IBoutlet it is showing an error like "Outlets cannot be connected to repeating content" what does it means?? we cant make outlets of UIbutton in tableview cell.kindly review it . i am stuck in it.i am making an outlet like this:

@property (weak, nonatomic) IBOutlet UIButton *sa;

and the error is "The sa outlet to the UIbutton is invalid"

like image 559
Mishal Awan Avatar asked Nov 26 '14 06:11

Mishal Awan


3 Answers

You can create subclass for UITableViewCell like below code

Create new class named CCell.h and CCell.m

in CCell.h

@interface CCell : UITableViewCell
@property(nonatomic,strong)IBOutlet UILabel *lblTemp;
@property(nonatomic,strong)IBOutlet UIButton *btnTemp;
@end

Now in your Viewcontroller.h

#import "CCell.h"

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CCell *cell = (CCell *)[tblView dequeueReusableCellWithIdentifier:@"CCell"];
    cell.lblTemp.text = @"asd";

    cell.btnTemp.tag = indexPath.row;
    [cell.btnTemp addTarget:self action:@selector(btnTempClicked:) forControlEvents:UIControlEventTouchUpInside]
    return cell;
}

-(void)btnTempClicked:(UIButton *)btnTemp
{ 
     NSLog(@"Button Clicked Index = %d",btnTemp.tag);   
}

Now open your Xib > tap on your UITableviewCell > open right side navigator > open 3rd tab named (Custom Class) > add Class = CCell > now open last tab you will get lblTemp bind option.

Maybe this will help you.

like image 36
ChintaN -Maddy- Ramani Avatar answered Oct 21 '22 11:10

ChintaN -Maddy- Ramani


Your answer is that you use an object in UITableViewCell by reusing it,

So you can't create it's outlet except you create Your class for your "UITableViewCell".

Below is a reference for you,

I hope that it's useful for you.

You need to drag and drop the object in your UITableViewCell, Then you have to give tag for that object.

then you can use it with its tag.

First give an identifier to UITableViewCell,

Below is a reference image for it.

enter image description here

Then give a tag to your UI object, As this in this reference image.

enter image description here

Below is sample code for you which I use regularly,

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


    UITableViewCell *Cell = [self.TableListRegion dequeueReusableCellWithIdentifier:@"List"];

    UIButton *objectOfButton = (UIButton *)[CellLast viewWithTag:200];

    [objectOfButton addTarget:self action:@selector(YourSelector:) forControlEvents:UIControlEventTouchUpInside];

    return Cell;

}

Now you can receive that button event by,

-(IBACTION)YourSelector:(id)sender{
// Your Button in Cell is selected.
// Do your stuff.

}

Feel free to ask if you need more help regarding it.

like image 129
Vishal Sharma Avatar answered Oct 21 '22 12:10

Vishal Sharma


Since you are creating a custom cell, you need to create a class for it. You will subclass UITableViewCell.

For example (using the property that you had in your question):

  1. Create a new Objective-C Class. Set the subclass to: UITableViewCell Give it an appropriate name (i.e. cell)

  2. In your cell.h file:

Create your property: @property (weak, nonatomic) IBOutlet UIButton *sa;

In the cell.m file:

@synthesize sa = _sa;

- (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
}

3.In Interface Builder, go back to the row that you created. Click the "Show Identity Inspector". Under "Custom Class", set that to your cell file.

4.Hold down the "Option" key and click the "cell.h" file. Then connect the button to the IBOutlet.

5.In your table view controller file:

import your cell.h file.

In cellForRowAtIndexPath method:

Cell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

That's it!

Everything should work then. Hope this helps!

like image 1
Sandy D. Avatar answered Oct 21 '22 11:10

Sandy D.