Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义UITableViewCell初始化和默认属性中的iOS自定义UIView_Ios_Objective C_Uitableview_Uiview - Fatal编程技术网

自定义UITableViewCell初始化和默认属性中的iOS自定义UIView

自定义UITableViewCell初始化和默认属性中的iOS自定义UIView,ios,objective-c,uitableview,uiview,Ios,Objective C,Uitableview,Uiview,我有一个子类UIView控件(MyCustomProgressView),我正在编写该控件,以便在多个应用程序中使用,每个应用程序都将打上品牌,我想知道如何使该控件对我的团队更加友好。该控件是一个自定义进度视图,通常在自定义UITableViewCell中使用 MyCustomProgressView有几个属性,可以设置为跟踪每次使用时的外观和行为。我给了它一个初始值设定项,将这些设置为默认值,但希望控件在使用时尊重这些默认值的覆盖 例如,在MyCusomProgressView.m中: - (

我有一个子类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似乎已经做到了。谢谢!