2013-10-07 71 views
-2

我有一個應用程序,我正在使用特定設計的原因。我把一個文本字段放在另一個帶有背景圖像的按鈕上方的警報視圖中。在ios 6版本中一切正常。alertview中的Textfield在ios7中不起作用?

UIAlertView *av=[[UIAlertView alloc] initWithTitle:@"fdhdj" message:@" hdfjkhfjkhdk" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@" ",@"cancel",nil]; 
    av.alertViewStyle = UIAlertViewStylePlainTextInput; 
namefield = [[UITextField alloc] initWithFrame:CGRectMake(10.0,43.0, 264.0, 44.0)]; 
    namefield.borderStyle = UITextBorderStyleNone; 
    namefield.background = [UIImage imageNamed:@"text_field_default.png"]; 
    namefield.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
    namefield.textAlignment = UITextAlignmentCenter; 
    //[namefield setBackgroundColor:[UIColor whiteColor]]; 
    [av addSubview:namefield]; 
    [namefield release]; 
    av.tag=12; 
    av.delegate=self; 
    [av show]; 

    [av release]; 

但是現在在ios 7中,我聽說你不能輕易改變UIAlertView的視圖層次結構。 一種替代這種情況是設置

alert.alertViewStyle = UIAlertViewStylePlainTextInput

但是我們可以在該文本字段的地方,我們想要的嗎?在我的情況下,第一otherbutton.can任何人都可以幫助我嗎?

+2

爲什麼不做你自己的UIView層次結構,你完全可以控制而不是用UIAlertView欺騙。 [Apple的UIAlertView狀態文檔](https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html#//apple_ref/doc/uid/TP40006802-CH3-DontLinkElementID_2) :「這個類的視圖層次是私有的,不能修改」,這就是你通過添加子視圖所做的。 –

回答

0

簡單回答你的問題是,不,你不能改變這個testFieldUIAlertViewStylePlainTextInput任何東西,你不應該。

這是來自蘋果:

的UIAlertView中類擬用作原樣,並且不支持 子類。該類的視圖層次結構是私有的,並且不得修改 。

不幸的是你聽到的我聽說你不能輕易改變的UIAlertView中視圖層次是錯誤的,你不能在iOS7改變UIAlertView的視圖層次可言。

有在網絡上一個很好的選擇,你可以在cocoacontrols.com

3
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Enter Student Name" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Save",nil]; 

[alertView setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
[alertView show]; 

我用來做這樣的,它的工作很細

+0

請閱讀我的問題然後回答 – hacker

2

這是我的組件,以支持addSubview與alertView在iOS7。

CXAlertView - 自定義警報視圖,允許您將視圖添加爲主要內容。

enter image description here

0

檢查不能輕易改變的iOS 7. UIAlertView中的視圖層次結構(也不應該知道,該文件明確告訴你不要)轉向開發者論壇,看看有關它的長篇討論。

你的情況的一種替代方法是設置alert.alertViewStyle = UIAlertViewStylePlainTextInput;這將爲您添加一個文本字段。您可以使用UITextField * textField = [alertView textFieldAtIndex:0];在UIAlertView委託回調中訪問它。