iOS:将UILabel子类化并更新其缩进
我有一个包含相当大表单的应用程序。我将UILabel子类化,以便在表单标签中保持一致性。然而,一些标签将是带有背景色的切分器,它们需要缩进 我知道当UILabel使用以下代码进行实例化时,我可以克服它的缩进设置:iOS:将UILabel子类化并更新其缩进,ios,uilabel,Ios,Uilabel,我有一个包含相当大表单的应用程序。我将UILabel子类化,以便在表单标签中保持一致性。然而,一些标签将是带有背景色的切分器,它们需要缩进 我知道当UILabel使用以下代码进行实例化时,我可以克服它的缩进设置: - (void)drawTextInRect:(CGRect)rect { UIEdgeInsets insets = {0, 5, 0, 5}; return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, inse
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
但这将为所有标签添加插图。不是我想要的
所以我写了一个自定义方法:
- (void) makeInsets
{
CGRect rect = self.frame;
if (hasInset) {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
} else {
UIEdgeInsets insets = {0, 0, 0, 0};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
}
问题是它发生在UILabel绘制之后。我尝试了[UILabelSubclass setNeedsDisplay:YES]
,但是setNeedsDisplay
方法出现了“无可见界面”错误。有没有一种方法可以用自定义的插入替代现有的插入 由于不接受参数,因此在setNeedsDisplay
中出现“无可见接口”错误。你应该写:
[subclassedLabelInstance setNeedsDisplay];
这个错误应该会消失。这也可能解决问题。您会在setNeedsDisplay
中遇到“无可见接口”错误,因为它不接受参数。你应该写:
[subclassedLabelInstance setNeedsDisplay];
这个错误应该会消失。它还可能解决这个问题。因为您正在对它进行子类化。。。您不能只添加一个布尔属性来指示是否缩进吗 .h文件
@property BOOL indentText;
.m文件
- (id) initWithIndent:(BOOL)indent {
if((self = [super init])) {
self.indentText = indent;
}
return self;
}
- (void)drawTextInRect:(CGRect)rect {
if( self.indentText ) {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
}
如果您计划进行大量定制,那么您可以在创建标签时传入某种样式常量,以指示如何标记标签。。。但如果您只打算这样做,那么我只需要添加一个简单的属性来打开它。因为您正在对它进行子类化。。。您不能只添加一个布尔属性来指示是否缩进吗 .h文件
@property BOOL indentText;
.m文件
- (id) initWithIndent:(BOOL)indent {
if((self = [super init])) {
self.indentText = indent;
}
return self;
}
- (void)drawTextInRect:(CGRect)rect {
if( self.indentText ) {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
}
如果您计划进行大量定制,那么您可以在创建标签时传入某种样式常量,以指示如何标记标签。。。但是,如果您只打算这样做,那么我只需要添加一个简单的属性来打开它。谢谢……这是一个愚蠢的错误汉克斯……那是个愚蠢的错误DI当然会给你选择的答案,因为我正在传递bool属性(hasInset),所以你提供的实际上更好地解决了我的问题。但另一个用户确实回答了我的setNeedsDisplay问题。谢谢你的推送。是的,我想既然你已经将UILabel子类化了。。。为什么不调整代码,这样就可以避免在外部调用setNeedsDisplay。现在您的视图代码将更具可读性:)我当然会给您选择的答案,因为我正在传递bool属性(hasInset),所以您提供的内容实际上更好地解决了我的问题。但另一个用户确实回答了我的setNeedsDisplay问题。谢谢你的推送。是的,我想既然你已经将UILabel子类化了。。。为什么不调整代码,这样就可以避免在外部调用setNeedsDisplay。现在,您的视图代码将更具可读性:)