我的问题很简单。在android中,我们可以将xml样式表与布局分开,以便它可以在任何地方重用,并且可以轻松编辑以进行UI设计更改。
在iOS xcode中也可以吗?如果可以如何(如果不是来自控制器)?需要图书馆?什么是好的图书馆?
感谢您的回答。
答案 0 :(得分:13)
您可以使用枚举创建自己的样式。通过在枚举枚举中放置枚举,您可以得到一个很好的分组:
enum Styles {
enum Labels {
case Standard
case LargeText
func style(label: UILabel) {
switch self {
case .Standard:
label.font = UIFont.systemFontOfSize(12)
case .LargeText:
label.font = UIFont.systemFontOfSize(18)
}
}
}
enum Buttons {
case RedButton
func style(button: UIButton) {
switch self {
case .RedButton:
button.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
}
}
}
}
然后你可以像这样使用它:
Styles.Labels.Standard.style(yourLabel)
您还可以为已设置的样式进行扩展:
extension UILabel {
func style(style: Styles.Labels) {
style.style(self)
}
}
extension UIButton {
func style(style: Styles.Buttons) {
style.style(self)
}
}
然后使用这样的扩展名:
yourLabel.style(.Standard)
yourButton.style(.RedButton)
答案 1 :(得分:2)
您还应该查看UIAppearance。它是一个设计代理,可用于大多数UI元素,您只需设置一次样式。
答案 2 :(得分:1)
您可以将UICategory类用于UIView用于此目的。为集borders
,border colors
,传递bazier-paths
,corner
radius
等创建不同的方法。这只是他们中的一小部分。类别是UIView,因此您可以使用buttons
,lables
,textview
,textedits
等;
<强>的UIView + category.h 强>
@interface UIView (category)
-(void)makeToRoundEdgeWithBorder:(CGFloat )borderwidth bordecolor:(UIColor *)color;
@end
<强>的UIView + category.m 强>
@implementation UIView (category)
-(void)makeToRoundEdgeWithBorder:(CGFloat )borderwidth bordecolor:(UIColor *)color
{
NSLog(@"height %f width %f",CGRectGetHeight(self.frame),CGRectGetWidth(self.frame));
self.layer.cornerRadius=CGRectGetHeight(self.frame)/2;
self.layer.masksToBounds=YES;
self.layer.borderColor=[color CGColor];
self.layer.borderWidth=borderwidth;
}
@end
使用
[yourlable makeToRoundEdgeWithBorder:0.0f bordercolor:[UIColor clearColor] cornerRadius:8.0f];
[yourbutton makeToRoundEdgeWithBorder:0.0f bordercolor:[UIColor clearColor] cornerRadius:8.0f];
[yourTextview makeToRoundEdgeWithBorder:0.0f bordercolor:[UIColor clearColor] cornerRadius:8.0f];
[yourTextfield makeToRoundEdgeWithBorder:0.0f bordercolor:[UIColor clearColor] cornerRadius:8.0f];
答案 3 :(得分:0)