Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.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
Ios 运行时无法更改和自定义自定义UITableViewCell中UIButtons的标题_Ios_Cocoa Touch_Uitableview_Uibutton - Fatal编程技术网

Ios 运行时无法更改和自定义自定义UITableViewCell中UIButtons的标题

Ios 运行时无法更改和自定义自定义UITableViewCell中UIButtons的标题,ios,cocoa-touch,uitableview,uibutton,Ios,Cocoa Touch,Uitableview,Uibutton,我创建了一个自定义的UITableViewCell,其中包含四个ui按钮。这些按钮的文本(标题标签)是根据单元格的索引生成的。我正在使用以下内容自定义表格视图中的每个按钮:CellForRowatineXpath(答案1是UIButton) 预期产出: Default button title: Answer 1 New button title: *ANSWER TEXT HERE* 但实际控制台输出显示字符串未更新,但在设备上它是正确的字符串。但是,它有时确实会更改标题,但仅更改我创建的第

我创建了一个自定义的
UITableViewCell
,其中包含四个
ui按钮
。这些按钮的文本(标题标签)是根据单元格的索引生成的。我正在使用以下内容自定义
表格视图中的每个按钮:CellForRowatineXpath
(答案1是
UIButton

预期产出:

Default button title: Answer 1
New button title: *ANSWER TEXT HERE*
但实际控制台输出显示字符串未更新,但在设备上它是正确的字符串。但是,它有时确实会更改标题,但仅更改我创建的第一个按钮的标题(我在每个按钮上使用相同的代码)

我使用
adjustTitleFontSizeToFit
方法创建了一个
UIButton
类别,因为我希望每个按钮的
titleLabel
在字符串不适合按钮框时自动调整字体大小。在本例之外测试此方法时,它会按预期工作。问题似乎是按钮的
标题标签
没有及时更新,以便
adjustTitleFontSizeToFit
执行其工作。换句话说,当在按钮上调用
adjustTitleFontSizeToFit
时,它操作的字符串是我创建按钮时
xib
中的默认字符串。
setTitle:forState:
之后的
NSLog
也显示了这一点

奇怪的行为(对我来说很奇怪)是,在应用程序中,它确实改变了标题。我只需要能够在单元格构建期间处理
标题标签
,以便调整按钮标签的大小


非常感谢任何想法,如果需要,我可以提供更多信息。

与许多UI错误一样,问题是我的xib/情节提要中缺少了一个简单的复选标记。我将第一个按钮设置为“自定义”按钮类型,其余按钮设置为系统“按钮”类型

泄露的信息应该是它只为一个按钮工作,而不是其他按钮。但万一有人遇到类似的问题,我就不谈了

如果有人需要调整UIButton的字体大小,这里是我使用的分类方法

- (void)adjustTitleFontSizeToFit
{   
    UIFont *font = self.titleLabel.font;
    CGSize size = self.frame.size;

    for (CGFloat maxSize = self.titleLabel.font.pointSize; maxSize >= self.titleLabel.minimumScaleFactor * self.titleLabel.font.pointSize; maxSize -= 1.f) {
        font = [font fontWithSize:maxSize];
        CGSize constraintSize = CGSizeMake(size.width, MAXFLOAT);
        CGSize labelSize = [self.titleLabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

        if(labelSize.height <= size.height) {
            self.titleLabel.font = font;
            [self setNeedsLayout];
            break;
        }
    }

    // set the font to the minimum size anyway
    self.titleLabel.font = font;
    [self setNeedsLayout];
} 
-(无效)调整标题字体大小以适合
{   
UIFont*font=self.titleLabel.font;
CGSize size=self.frame.size;
对于(CGFloat maxSize=self.titleLabel.font.pointSize;maxSize>=self.titleLabel.minimumScaleFactor*self.titleLabel.font.pointSize;maxSize-=1.f){
font=[font fontWithSize:maxSize];
CGSize constraintSize=CGSizeMake(size.width,MAXFLOAT);
CGSize labelSize=[self.titleLabel.text sizeWithFont:font constrainedToSize:ConstrainetSize lineBreakMode:NSLineBreakByWordWrapping];

if(labelSize.height)您看到了什么UI问题?
adjustTitleFontSizeToFit
应该在渲染时而不是调用时起作用。
- (void)adjustTitleFontSizeToFit
{   
    UIFont *font = self.titleLabel.font;
    CGSize size = self.frame.size;

    for (CGFloat maxSize = self.titleLabel.font.pointSize; maxSize >= self.titleLabel.minimumScaleFactor * self.titleLabel.font.pointSize; maxSize -= 1.f) {
        font = [font fontWithSize:maxSize];
        CGSize constraintSize = CGSizeMake(size.width, MAXFLOAT);
        CGSize labelSize = [self.titleLabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

        if(labelSize.height <= size.height) {
            self.titleLabel.font = font;
            [self setNeedsLayout];
            break;
        }
    }

    // set the font to the minimum size anyway
    self.titleLabel.font = font;
    [self setNeedsLayout];
}