自定义UITableViewCell初始化和默认属性中的iOS自定义UIView
我有一个子类UIView控件(MyCustomProgressView),我正在编写该控件,以便在多个应用程序中使用,每个应用程序都将打上品牌,我想知道如何使该控件对我的团队更加友好。该控件是一个自定义进度视图,通常在自定义UITableViewCell中使用 MyCustomProgressView有几个属性,可以设置为跟踪每次使用时的外观和行为。我给了它一个初始值设定项,将这些设置为默认值,但希望控件在使用时尊重这些默认值的覆盖 例如,在MyCusomProgressView.m中:自定义UITableViewCell初始化和默认属性中的iOS自定义UIView,ios,objective-c,uitableview,uiview,Ios,Objective C,Uitableview,Uiview,我有一个子类UIView控件(MyCustomProgressView),我正在编写该控件,以便在多个应用程序中使用,每个应用程序都将打上品牌,我想知道如何使该控件对我的团队更加友好。该控件是一个自定义进度视图,通常在自定义UITableViewCell中使用 MyCustomProgressView有几个属性,可以设置为跟踪每次使用时的外观和行为。我给了它一个初始值设定项,将这些设置为默认值,但希望控件在使用时尊重这些默认值的覆盖 例如,在MyCusomProgressView.m中: - (
- (void)awakeFromNib {
[self setup];
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (void)setup {
//initialization
[self setDelegate:nil];
[self setCurrentProgress:0.0f];
[self setLastProgress:0.0f];
[self setAnimated:YES];
[self setProgressColor:[UIColor redColor]];
[self setProgressWidth:7.0f];
[self setTrackWidth:5.0f];
[self setDuration:0.2f];
[self setProgressLabelColor:[UIColor: darkGrayColor];
}
太好了。现在,当我使用MyCustomTableViewCell中的视图时,我想执行以下操作:
@property (strong, nonatomic) IBOutlet MyCusomProgressView *myProgView;
...
- (void)awakeFromNib {
// Initialization code
[self.myProgView setDuration:0.25f];
[self.myProgView setProgressColor:[UIColor blueColor];
[self.myProgView setProgressLabelColor:[UIColor yellowColor];
[self.myProgView setTrackWidth:2.0];
[self.myProgView setProgressWidth:3.0];
}
问题在于,当MyCustomTableViewCell加载MyCusomProgressView时,默认初始值设定项将运行并覆盖自定义设置。我知道每次使用我都可以修改MyCusomProgressView.m,但如果可能的话,我更愿意保持静态
如果有关系,则会涉及到非XIB,因为我在故事板中已经完成了这一切,并且我在cellForRowAtIndexPath中除了更改自定义单元格类的签名之外,没有做任何奇怪的事情:
- (MyCustomTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomTableViewCell *cell = (MyCustomTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath];
// Configure the cell...
[cell.myProgView setDelegate:self];
return cell;
}
有什么想法吗?我确信这是一件愚蠢而简单的事情…这是一个调用设置方法的顺序问题。在
MyCusomProgressView
中设置断点,查看何时调用awakeFromNib
和initWithFrame
。还可以在MyCustomTableViewCell
中设置断点,以查看何时调用其awakeFromNib
如果调用了initWithFrame
,请尝试在mycusompressView
中完全删除awakeFromNib
或者尝试在MyCustomTableViewCell
awakeFromNib
中添加此行作为第一行代码:
[self.myProgView view];
这将强制加载进度视图,并调用其
awakeFromNib
。缺点是,您不希望进度视图的用户必须这样做,因为这并不明显。为了得到您想要做的事情,您正在使用init构造函数中的“默认”配置设置自定义TableViewCell,但您希望在cellForRowAtIndexPath中覆盖此配置值(如果需要的话)。。。对吗?我只需要你的信息给你正确的答案:-)不完全正确。我正在为我的子类UIView控件设置默认值,该控件位于自定义tableviewcell中。我目前正试图覆盖tableviewcell中的默认值,但自定义UIView中的默认值在设置后将加载到单元格中。如果可能的话,我希望避免从CellForRowatineXpath设置自定义UIView属性。谢谢Mike。似乎在加载表时,它首先调用MyCustomTableViewCell的awakeFromNib,然后调用MyCustomProgressView的awakeFromNib。因此,即使我在自定义单元格的实现中设置属性,它们也会被自定义控件自己的init重写。当我添加[self.myProgView]时;我看到“MyCustomProgressView没有可见的界面”声明了选择器“view”。删除awakeFromNib似乎已经做到了。谢谢!