我是iOS新手我正在使用uitableview单元格我已将按钮拖放到对象检查器的表格视图单元格中。但是当我制作它的IBoutlet时,它显示的错误就像"奥特莱斯无法连接到重复内容"这是什么意思??我们不能在tableview cell中创建UI按钮的出口。请仔细检查它。我被困在里面。我正在制作这样一个出口:
@property (weak, nonatomic) IBOutlet UIButton *sa;
,错误是" UI按钮的出口无效"
答案 0 :(得分:28)
你的答案是你通过重用它来使用UITableViewCell中的一个对象,
所以你不能创建它的出口,除非你为你的“UITableViewCell”创建你的类。
以下是您的参考资料,
我希望它对你有用。
您需要将对象拖放到UITableViewCell
中,
然后你必须为该对象提供标签。
然后你可以将它与它的标签一起使用。
首先为UITableViewCell
提供标识符,
下面是它的参考图片。
然后为UI对象添加标签, 正如本参考图片所示。
下面是我经常使用的示例代码,
- (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。
例如(使用你问题中的属性):
创建一个新的Objective-C类。将子类设置为:UITableViewCell 给它一个合适的名字(即单元格)
在您的cell.h文件中:
创建你的属性:@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
如果你真的想这样做,你的细胞数量有限。你可以:
ViewController
更改为UITableViewController
的子类,然后将Table View Controller
文件展开到StoryBoard
Table View
中StoryBoard
的内容从Dynamic Prototypes
更改为Static Cells
然后您可以为您的单元格添加一些视图,例如某些标签
将label
关联到ViewController
并继续剩下的工作
如果你想创建一个可重复使用的单元格,请忘记我上面所说的
答案 7 :(得分:0)
一个非常简单的解决方案是:
只需采用表视图单元格的子类中的视图或NSLayoutConstraint引用出口而不是表视图控制器,并在cellForRowAtIndexPath方法或任何其他方法中使用表视图单元格的对象进行访问。
注意:这是一个重复的对象,因此您不能在表视图控制器中进行引用。