2015-07-22 81 views
0

我已經使用兩個delegate方法爲textView創建佔位符。在textView中佔位符的替代

代碼:

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 

    if([Description.text isEqualToString:@"Description of home"]&&[Description.font isEqual:[UIFont fontWithName:@"Helvetica" size:18]]) 
    { 
     Description.text=nil; 
    } 
    if([Display.text isEqualToString:@"Display"]&&[Display.font isEqual:[UIFont fontWithName:@"Helvetica" size:18]]) 
    { 
     Display.text=nil; 
    } 
    return YES; 
} 
-(BOOL)textViewShouldEndEditing:(UITextView *)textView 
{ 

    if ([Description.text isEqualToString:@""]) // Description is textViewObject 
    { 
     [email protected]"Description of home"; 
     Description.font=[UIFont fontWithName:@"Helvetica" size:18]; 
    } 


    if ([Display.text isEqualToString:@""]) 
    { 
     [email protected]"Display"; // Display is textViewObject 
     Display.font=[UIFont fontWithName:@"Helvetica" size:18]; 
    } 
    return YES; 
} 
@end 

這是工作正確的。但問題是當我點擊任何textView時,文本從所有textView獲取nil。這是因爲我已將所有textView連接到委託。

我希望文本應該只在特定的textView上消失。

+0

的[佔位符的UITextView(http://stackoverflow.com/questions/1328638/placeholder-in-uitextview) –

+0

可能重複我認爲佔位符支持添加到UITextView中的最佳方式是它的子類,像這樣:[YXTextView](https://github.com/yixia-team/YXTextView)。 – Allen

+0

您需要繼承UITextView並將標籤添加爲子視圖。通過委託方法,你會讓自己變得瘋狂。 – DBoyer

回答

2

,你可以在委託方法像這樣添加條件:

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
if(textView == yourTextView1) 
{ 
    //your code for perticular textView1 
} 
else if(textView == yourTextView2) 
{ 
    //your code for perticular textView2 
} 

    return YES; 
} 
-1

檢查如果委託在想UITextView操作:

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 

    if(textView == Description && [Description.text isEqualToString:@"Description of home"]&&[Description.font isEqual:[UIFont fontWithName:@"Helvetica" size:18]]) 
    { 
     Description.text=nil; 
    } 
    if(textView==Display && [Display.text isEqualToString:@"Display"]&&[Display.font isEqual:[UIFont fontWithName:@"Helvetica" size:18]]) 
    { 
     Display.text=nil; 
    } 
    return YES; 
} 
-1
通過@ CmKndy對於這個問題

最簡單的方法是https://stackoverflow.com/a/10201671/3633534

使用UITextViewDelegate代表在您的班級中並添加文本@"placeholder text here..."textViewlightGrayColor默認顯示。

下面的代碼是佔位符在textView

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    if ([textView.text isEqualToString:@"placeholder text here..."]) { 
     textView.text = @""; 
     textView.textColor = [UIColor blackColor]; //optional 
    } 
    [textView becomeFirstResponder]; 
} 

- (void)textViewDidEndEditing:(UITextView *)textView 
{ 
    if ([textView.text isEqualToString:@""]) { 
     textView.text = @"placeholder text here..."; 
     textView.textColor = [UIColor lightGrayColor]; //optional 
    } 
    [textView resignFirstResponder]; 
} 

對於你的問題[更新]

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    if(textView == Description && [Description.text isEqualToString:@"Description of home"]) 
    { 
     Description.text = @""; 
    } 
    else if(textView == Display && [Display.text isEqualToString:@"Display"]) 
    { 
     Display.text = @""; 
    } 
    return YES; 
} 

-(BOOL)textViewShouldEndEditing:(UITextView *)textView 
{ 
    if (textView == Description && [Description.text isEqualToString:@""]) // Description is textViewObject 
    { 
     Description.text = @"Description of home"; 
     Description.font=[UIFont fontWithName:@"Helvetica" size:18]; 
    } 
    else if (textView == Display && [Display.text isEqualToString:@""]) 
    { 
     Display.text = @"Display"; // Display is textViewObject 
     Display.font=[UIFont fontWithName:@"Helvetica" size:18]; 
    } 
    return YES; 
} 
@end 
+0

你可以做到這一點,但它是非常規的。 創建一個引用UITextView的IBOutlet屬性比匹配字符串更安全,更具可預測性。您可以在「if語句」或IB的佔位符字段中鍵入錯誤的內容,並且可能需要更多時間才能進行調試。 – Adama

+1

@Adama,'(UITextView *)textView'將始終引用當前的'textView',並且作用域僅在定義的方法中,因此它們不會出錯。 'IBOutlet'是不同的東西,它是全球使用的任何'id'。 – Sujay

0

您需要區分每個UITextViews以某種方式。

如果屏幕上只有一小部分UITextViews,則應將每個UItextView保存爲一個屬性。看看這個YouTube視頻creating IBOutlets

然後,只需命名爲了UITextViews:textView1,textView2等等

然後在你的委託方法,您可以檢查是否在法傳遞TextView的等於您要從中刪除文本的屬性。

if (textView == self.textView1) { 
    //delete text 
} else { 
    //do nothing or something else 
}