2014-03-03 57 views
1

我已經子類UITextField並試圖通過調用[self.superView addSubview:newView]添加子視圖,但這不起作用,並且self.superview.class返回null添加子視圖到子類UITextField不顯示

一個如何可以一個子視圖添加到superView

該視圖顯示在屏幕上,並使用故事板

@interface NewTextField : UITextField <UITextFieldDelegate> 


@end 

然後

@implementation MBTextField 


- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     [self addWhiteLine]; // here im adding a view 
    } 
    return self; 
} 


- (void)addWhiteLine{ 

    UIView *div = [UIView new]; 
    div.frame = CGRectMake(self.frame.origin.x, 
          self.frame.origin.y + self.frame.size.height+borderWidth, 
          self.frame.size.width, 
          borderWidth); 

    div.backgroundColor = [borderColor colorWithAlphaComponent:0.3f]; 
    [self.superview addSubview:div]; 

} 

溶液中進行 :通過@接受回答和評論麥克沃思。視圖的框架必須更改爲以下內容。

div.frame = CGRectMake(0, 
          self.frame.size.height - borderWidth, 
          self.frame.size.width, 
          borderWidth); 
+2

當您調用'addWhiteLine'時,文本字段尚未添加到視圖。 – rmaddy

+1

讓這個自定義視圖添加一個視圖給自己以外的東西是不好的。現在,您必須確保移除其他視圖,並在「自我」移動時移動其他視圖。只需將子視圖添加到'self'即可保持簡單。 – rmaddy

+0

爲什麼你將新創建的視圖添加到文本字段的超級視圖而不是將其添加爲文本字段的子視圖?添加到自己的 – Srikanth

回答

2

如果self.superview是零,然後在時間addWhiteLine被調用,自我還沒有被添加到視圖層次呢。考慮到您從initWithCoder調用它,這實際上是有道理的。在將其添加到超級視圖之前,加載此視圖的任何人都必須使用alloc/init。作爲一個修復,爲什麼要加入self.superview,你不應該加入self嗎?

編輯:正如評論中所討論的,另一個問題是該線條正在畫框外,因此它應該是self.frame.origin.y + self.frame.size.height-borderWidth

+0

也沒有在屏幕上顯示任何內容。我把它做得高得多,而且什麼也沒有。 – carbonr

+0

origin.y + height + borderWidth會帶你離開框架的底部,不是嗎? http://www.idev101.com/code/User_Interface/view_frames_bounds.html – mackworth

+0

我認爲你的評論是解決問題的關鍵。它跳出了文本字段框架,這就是爲什麼我想添加到超級視圖。如果我保持框架,它將重疊textField中的文本。有什麼建議麼? – carbonr

相關問題