Outlets无法连接到重复内容iOS 5

时间:2014-11-26 06:21:03

标签: ios uitableview

我是iOS新手我正在使用uitableview单元格我已将按钮拖放到对象检查器的表格视图单元格中。但是当我制作它的IBoutlet时,它显示的错误就像"奥特莱斯无法连接到重复内容"这是什么意思??我们不能在tableview cell中创建UI按钮的出口。请仔细检查它。我被困在里面。我正在制作这样一个出口:

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

,错误是" UI按钮的出口无效"

8 个答案:

答案 0 :(得分:28)

你的答案是你通过重用它来使用UITableViewCell中的一个对象,

所以你不能创建它的出口,除非你为你的“UITableViewCell”创建你的类。

以下是您的参考资料,

我希望它对你有用。

您需要将对象拖放到UITableViewCell中, 然后你必须为该对象提供标签。

然后你可以将它与它的标签一起使用。

首先为UITableViewCell提供标识符,

下面是它的参考图片。

enter image description here

然后为UI对象添加标签, 正如本参考图片所示。

enter image description here

下面是我经常使用的示例代码,

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

}

现在您可以通过

接收该按钮事件
-(IBACTION)YourSelector:(id)sender{
// Your Button in Cell is selected.
// Do your stuff.

}

随意询问您是否需要更多帮助。

答案 1 :(得分:7)

您可以为UITableViewCell创建子类,如下面的代码

创建名为CCell.h和CCell.m的新类

CCell.h

中的

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

现在在 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);   
}

现在打开你的Xib>点击你的UITableviewCell>打开右侧导航器>打开名为(自定义类)的第三个选项卡>添加Class = CCell>现在打开最后一个选项卡,您将获得lblTemp绑定选项。

也许这会对你有帮助。

答案 2 :(得分:1)

由于您要创建自定义单元格,因此需要为其创建一个类。您将继承UITableViewCell。

例如(使用你问题中的属性):

  1. 创建一个新的Objective-C类。将子类设置为:UITableViewCell 给它一个合适的名字(即单元格)

  2. 在您的cell.h文件中:

  3. 创建你的属性:@property(弱,非原子)IBOutlet UIButton * sa;

    在cell.m文件中:

    @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.在Interface Builder中,返回到您创建的行。 单击“显示标识检查器”。 在“自定义类”下,将其设置为您的单元格文件。

    4.按住“Option”键并单击“cell.h”文件。然后将按钮连接到IBOutlet。

    5.在您的表视图控制器文件中:

    导入你的cell.h文件。

    cellForRowAtIndexPath方法中:

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

    就是这样!

    一切都应该有效。希望这有帮助!

答案 3 :(得分:0)

你不能,因为按钮是一个单元格的一部分,并且当应用程序运行时(可能)会有多个该单元格的实例。

假设您可以进行连接,并且当应用程序运行时有2个单元格(因此有2个按钮),Cocoa Touch无法确定哪个按钮将被该插座引用(您也不能)。

您可以对UITableViewCell进行子类化,请求表视图将子类用于其单元格,并将按钮连接到子类中的出口。在这种情况下,子类将有多个实例,每个实例将映射到一个单元格。

答案 4 :(得分:0)

每当您需要创建自定义tableView单元格时,建议继承UITableViewcell并在该类中添加UIButton。在tableview委托方法cellForRowAtIndexPath中,您可以为每个单元格创建子类tableviewCell的对象。

答案 5 :(得分:0)

我在UIViewViewtroller中的UITableviewcell单元格标签的插座连接中已完成,它应该更改为在UITableviewcell的子类中创建一个CustomCell,然后在此子类中的插座连接中完成错误清除。

答案 6 :(得分:0)

@Mishal Awan

如果你真的想这样做,你的细胞数量有限。你可以:

  1. ViewController更改为UITableViewController的子类,然后将Table View Controller文件展开到StoryBoard
  2. Table ViewStoryBoard的内容从Dynamic Prototypes更改为Static Cells
    1]
  3. 然后您可以为您的单元格添加一些视图,例如某些标签 2]

  4. label关联到ViewController并继续剩下的工作

  5. 如果你想创建一个可重复使用的单元格,请忘记我上面所说的

答案 7 :(得分:0)

一个非常简单的解决方案是:

只需采用表视图单元格的子类中的视图或NSLayoutConstraint引用出口而不是表视图控制器,并在cellForRowAtIndexPath方法或任何其他方法中使用表视图单元格的对象进行访问。

注意:这是一个重复的对象,因此您不能在表视图控制器中进行引用。