2014-10-02 14 views
15

Tôi có thể sử dụng IB_DESIGNABLE và/hoặc IBInspectable để đặt layer.borderWidth và layer.borderColor trong Interface Builder không? Tôi hiện đang tạo nút của tôi trong mã nhưng tôi muốn để có thể thiết lập tất cả điều này trong IB nhưng tôi không chắc chắn nếu các thuộc tính này có thể được thiết lập theo cách đó trong Xcode 6. Tôi muốn làm cho điều này một IBOutlet thay vì có tất cả các thiết lập này trong mã. Đây là mã nút của tôi bây giờ.Đặt chiều rộng và màu đường viền lớp UIButton trong Bộ dựng giao diện

directions = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
directions.titleLabel.textAlignment = NSTextAlignmentCenter; 
directions.titleLabel.font = [UIFont fontWithName:@"FranklinGothicStd-ExtraCond" size:20.0]; 
[directions setTitle:@"Directions" forState:UIControlStateNormal]; 
[directions setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
directions.frame = CGRectMake(20, 178, 70, 70); 
directions.layer.borderWidth = 2.0f; 
directions.layer.borderColor = [UIColor whiteColor].CGColor; 
directions.clipsToBounds = YES; 
directions.backgroundColor = [UIColor clearColor]; 
[directions addTarget:self action:@selector(getDirections:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:directions]; 

tôi thiết lập các giá trị như đề nghị và biên giới không bao giờ được thể hiện trong các mô phỏng. EDIT: Tôi đã tìm ra lý do tại sao đường viền không hiển thị khi thiết lập các giá trị này trong IB. Màu biên giới là một CGColor vì vậy tôi đã phải đặt nó trong mã.

Trả lời

5

Bạn có thể thiết lập hầu hết những người trong xây dựng giao diện thêm runtime thuộc tính đến các yếu tố: enter image description here

Đối layer.borderWidth = 2.0f; sẽ là:

Chọn nút và thêm một thuộc tính mới

keypath: layer.borderWidth

loại: Số Value 2

Những thay đổi này sẽ không được hiển thị bên trong xây dựng giao diện, chỉ tại thời điểm chạy

+0

Cảm ơn. Điều đó sẽ giúp nhưng tôi muốn biết về việc sử dụng IBInspectable và IB_DESIGNABLE để các hiệu ứng có thể được nhìn thấy trong IB. – raginggoat

+0

Tôi đã thử và đường viền không xuất hiện. – raginggoat

+0

Bạn cũng phải thiết lập borderColor để xem đường biên – Istvan

3

có u có thể ở bên phải nhấp vào trình kiểm tra nhận dạng, u sẽ tìm thấy như thế này enter image description here

nhấp chuột + trong User Defined Runtime Attributes

chọn keypath và chỉnh sửa nó

viết mã như

layer.cornerRadius và trong Type thay đổi kiểu này để number và thiết lập giá trị cần ur như thế này

u cũng có thể thay đổi màu văn bản và rất nhiều màu sắc.

Chúc mừng mã hóa

+0

Cảm ơn. Điều đó sẽ giúp nhưng tôi muốn biết về việc sử dụng IBInspectable và IB_DESIGNABLE để các hiệu ứng có thể được nhìn thấy trong IB. – raginggoat

+0

Và tôi đã thử điều này ngay bây giờ và biên giới không xuất hiện. – raginggoat

+0

bạn phải đặt '[button.layer setMasksToBounds: YES];' – sreekanthk

27

Trên thực tế bạn có thể thiết lập một số thuộc tính của lớp một cái nhìn thông qua xây dựng giao diện. Tôi biết rằng tôi có thể đặt borderWidth của một layer và angleRadius thông qua xcode. borderColor không hoạt động, có lẽ vì lớp muốn có một CGColor thay vì một UIColor.

Bạn có thể phải sử dụng Chuỗi thay vì số, nhưng nó hoạt động!

enter image description here

Nhưng bạn có thể sử dụng loại để tính proxy như layer.borderColor.(Từ ConventionalC CocoaPod)

CALayer + XibConfiguration.h:

#import <QuartzCore/QuartzCore.h> 
#import <UIKit/UIKit.h> 

@interface CALayer(XibConfiguration) 

// This assigns a CGColor to borderColor. 
@property(nonatomic, assign) UIColor* borderUIColor; 

@end 

CALayer + XibConfiguration.m:

#import "CALayer+XibConfiguration.h" 

@implementation CALayer(XibConfiguration) 

-(void)setBorderUIColor:(UIColor*)color 
{ 
    self.borderColor = color.CGColor; 
} 

-(UIColor*)borderUIColor 
{ 
    return [UIColor colorWithCGColor:self.borderColor]; 
} 

@end 

Interface Builder

Kết quả sẽ được rõ ràng trong thời gian chạy, không phải trong Xcode.

+1

Đối với những người khác gặp vấn đề này, nếu bạn muốn có phiên bản nhanh, hãy kiểm tra: http://stackoverflow.com/a/27986696/130556 – RyanJM

+0

Có vẻ như bạn có thể đặt cornerRadius với giá trị Số trong Thuộc tính thời gian chạy do người dùng xác định Xcode 7.3. –

+0

cách thiết lập porxy này –

Các vấn đề liên quan