2014-09-19 73 views
3

我剛剛更新到iOS 8,我的應用程序有問題,除了操作工作表上的日期選取器。當爲了顯示操作表而將操作選擇爲與子視圖一起添加的日期選擇器時,應用程序會崩潰。我發現這個問題的代碼,其是:UIDatePickerView問題,因爲更新到ios 8

-(void)willPresentActionSheet:(UIActionSheet*)actionSheet{ 

theDatePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 40, 320, 216)]; 
[actionSheet addSubview:theDatePicker]; 


NSArray *subviews = [actionSheet subviews]; 
[[subviews objectAtIndex:0]setFrame:CGRectMake(20, 266, 280, 46)]; //this line 
[[subviews objectAtIndex:1]setFrame:CGRectMake(20, 317, 280, 46)]; //also this one 

} 

控制檯日誌產生這樣的:

-[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 

以前我解決了它(嚴重)通過改變每個索引2 & 3,其工作,但是一個凌亂的實施。

這是實際執行:

-(void)willPresentActionSheet:(UIActionSheet*)actionSheet{ 

theDatePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 40, 320, 216)]; 
[actionSheet addSubview:theDatePicker]; 


NSArray *subviews = [actionSheet subviews]; 
[[subviews objectAtIndex:0]setFrame:CGRectMake(20, 266, 280, 46)]; 
[[subviews objectAtIndex:1]setFrame:CGRectMake(20, 317, 280, 46)]; 

} 

-(void)datePickerViewFromInput:(NSString*)title{ 
    SheetPicker=[[UIActionSheet alloc]initWithTitle: title delegate:self cancelButtonTitle:@"Cancel"  destructiveButtonTitle:nil otherButtonTitles:@"Set", nil]; 
[SheetPicker showInView:self.view ]; 
[SheetPicker setFrame:CGRectMake(0,117, 325, 383)]; 
theDatePicker.datePickerMode = UIDatePickerModeDate; 
NSDateFormatter *Formatter = [[NSDateFormatter alloc]init]; 
[Formatter setDateFormat:@"MM/dd/yyyy"]; 

} 

如果我刪除的問題代碼,動作片將顯示,但已不再是一個日期選擇器。 (我不知道爲什麼)

有關如何解決此問題的任何想法?

在此先感謝

回答

2

也許蘋果改變視圖層次,there is a note in the docs並沒有真正覆蓋你的情況,但還是給了我們一個提示,這是怎麼回事:

UIActionSheet的目的不是要被繼承,也不應該您將視圖添加到其層次結構中。如果您需要提供比UIActionSheet API提供更多定製的工作表,您可以創建自己的工作表並使用presentViewController以模態方式呈現它:animated:completion :.

就像UIAlerView蘋果不希望我們改變它的體驗 - 那裏 - 他們做了一些修補視圖層次結構。

最激動人心的解決方案是按照蘋果建議的做法:創建一個視圖控制器並以模態方式呈現它。

+0

輝煌,謝謝。 – TinMan7757 2014-09-19 10:13:47

0

有一個滑塊改變UIActionSheet在iOS的8試試這個代碼。

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet]; 

[alert.view addSubview:theDatePicker]; 
[self presentViewController:alert animated:YES completion:nil]; 
+0

這可行,但在一定程度上。 DatePicker不會作爲子視圖添加到警報控制器中,而是添加到主視圖中。然後它停留在那裏,我需要它被添加到警報控制器,所以我也可以解僱它。 – TinMan7757 2014-09-19 10:11:00

+0

謝謝..這是真的。 – Deepak 2014-09-19 10:44:03

+1

你在哪裏不遠,使用 [partentView.view addSubview:TheDatePicker]; 只需調整控制器視圖以容納選取器。 – TinMan7757 2014-09-19 11:04:46