出于可重用性的原因,我感兴趣的是找到一种以编程方式将文本和自定义UITextFields有效地添加到视图的方法,类似于如何使用NSString的stringWithFormat:组合字符串,然后将结果分配给UILabel的text属性。理想情况下,使用2-3条语句,我可以编写文本并将UITextField对象包含在字符串中,并获得可以自动嵌入文本的格式正确的UIView,可以直接将其嵌入到视图中。基本上,它的功能类似于具有添加UIView对象的功能的UILabel。对于输出示例,此图像将是文本和带下划线的UITextFields的组合:
如果存在,它将允许我重用单个UITableViewCell子类,而不是具有5-6个xib和3-4个子类。我已经搜索了大约2个小时,没有运气,没有一个已经存在的解决方案,所以有没有人以前遇到过这个问题并使用或发布了一个库来处理此问题,还是有一个我忽略的简单解决方案?
谢谢!
最佳答案
您可以使用CSLinearLayoutView(https://github.com/scalessec/CSLinearLayoutView)
并创建一个类
@implementation LabledView
+ (UIView*)create :(CGRect) frame view:(UIView*) view labelTitle:(NSString*)labelTitle viewLinearLayoutMakePadding :(CSLinearLayoutItemPadding)viewLinearLayoutMakePadding labelLinearLayoutMakePadding :(CSLinearLayoutItemPadding)labelLinearLayoutMakePadding font:(UIFont*)font textColor:(UIColor*)textColor
{
CSLinearLayoutView *container = [[CSLinearLayoutView alloc] initWithFrame:frame];
container.orientation = CSLinearLayoutViewOrientationHorizontal;
UILabel *label = [[UILabel alloc] init];
label.textColor = textColor;
[label setText:labelTitle];
[label setFont:font];
[label sizeToFit];
CSLinearLayoutItem *itemLabel = [CSLinearLayoutItem layoutItemForView:label];
itemLabel.padding = labelLinearLayoutMakePadding;
CSLinearLayoutItem *itemView = [CSLinearLayoutItem layoutItemForView:view];
itemView.padding = viewLinearLayoutMakePadding;
[container addItem:itemLabel];
[container addItem:itemView];
return container;
}
例如:
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 260, 40)];
UIView *customView = [LabledView create:CGRectMake(0, 0, 280, 40) view:textField
labelTitle:@"your label" viewLinearLayoutMakePadding:CSLinearLayoutMakePadding(0, 10, 0, 0)
labelLinearLayoutMakePadding:CSLinearLayoutMakePadding(10, 0, 0, 0)
font:[UIFont fontWithName:@"Helvetica" size:12] textColor:[UIColor blackColor]];