2017-03-07 30 views
1

在斯威夫特我想這樣做是爲了創造一種封閉的一個UIView(我認爲這是一個封閉的),我怎麼能在客觀做到這一點同樣的事情-C? 我不想設置所有的變量之類的東西,在viewDidLoad中()。 感謝您的幫助。在Objective-C創建UIViews編程,並提出,在一個封閉

let myView: UIView = { 
let view = UIView() 
view.layer.masksToBounds = true 
view.layer.cornerRadius = 5 
view.translatesAutoresizingMaskIntoConstraints = false 
return view 
}() 

回答

3

你可以沒有initviewDidLoad做它最接近的是懶惰的實例化。

@interface SomeClass: NSObject 
@property (nonatomic, strong) UIView *myView; 
@end 

@implementation SomeClass 

- (UIView *)myView 
{ 
    if (!_myView) { 
     _myView = [[UIView alloc] init]; 
     _myView.layer.masksToBounds = YES; 
     _myView.layer.cornerRadius = 5; 
     _myView.translatesAutoresizingMaskIntoConstraints = NO; 
    } 

    return _myView; 
} 

@end 
+0

我展示瞭如何在一個塊實例化一個對象,並返回對象爲塊的結果,但你的答案很可能是更接近真正的** **問題的任擇議定書問比我的。 (屬性的懶惰實例。)投票。 –

+0

我怎麼能打電話嗎?(我在Objective C的一個小白) – TBDevOfWorldOfSwIFT

+0

要調用它只是'self.myView'。 – keithbhunter

1

您可以在Objective-C創建幾乎相同的代碼:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIView *myView = ^UIView*() { 
     UIView *view = [[UIView alloc] initWithFrame: CGRectZero]; 
     view.layer.masksToBounds = TRUE; 
     view.layer.cornerRadius = 5; 
     view.translatesAutoresizingMaskIntoConstraints = FALSE; 
     //Add constraints 
     return view; 
    }(); 
    [self.view addSubview: myView]; 
} 

然而,就像它在雨燕的確不會創建一個計算的變量。它只是定義了一個塊,以初始化本地變量調用它。