標籤:views vpc 迴圈 add gravity ios 刪除 south pop
接上述案例找BUG:【iOS開發-51】案例學習:動畫新寫法、刪除子視圖、視圖順序、延遲方法、button多功能使用方法及icon表徵圖和啟動頁設定
(1)BUG:答案滿了就不能再點擊optionbutton,答案沒滿就能點。
在optionClick方法的if(full)中設定,即推斷答案是否滿了,假設滿了。則:
if (full) { //假設答案滿了,無論是否正確,僅僅要滿了,以下的optionbutton就不能被點擊 for (UIButton *optionBtn in self.optionView.subviews) { optionBtn.enabled=NO; }}
僅僅要點擊答案button,答案必定沒有滿,所以做個相反操作:
-(void)answerClick:(UIButton *)answerBtn{ //假設答案滿了,無論是否正確。僅僅要滿了,以下的optionbutton就不能被點擊 for (UIButton *optionBtn in self.optionView.subviews) { optionBtn.enabled=YES; }}
(2)以上BUG的另外一種解決的方法:讓optionbutton的父控制項整個不能與使用者互動。
即用下面語句:
self.optionView.userInteractionEnabled=NO;
self.optionView.userInteractionEnabled=YES;
取代上面的for迴圈。
可是除了以上兩處之外,還要設定一處。就是由於我們推斷了僅僅要答案滿了,那麼父控制項就不能互動button不能點擊,儘管通過點擊答案就能恢複互動。
可是特殊情況是:我們點擊滿了,然後直接跳轉到“下一題”,此時父控制項依舊是被鎖定不能互動的。所以須要在“跳轉到下一題”的方法中,設定父控制項能互動。即
- (IBAction)nextQuestion { self.optionView.userInteractionEnabled=YES;}
或者,最根本的是在加入optionbutton的那個方法中設定上面那句話:
-(void)addOptionBtn:(NSQuestion *)question{ self.optionView.userInteractionEnabled=YES;}
(3)到了最後一題,儘管“下一題”button被之前做了推斷不能點擊,可是假設答案答對了系統會繼續跳到下一題,這個時候依舊會崩潰,所以須要做個推斷,假設是最後一題。則……彈框。
——下面語句的原理在於:假設我們正在回答的時最後一道題,那麼答對之後,它會繼續調用nextQuestion方法,這個時候我們就推斷它是否是最後一道題,假設是,則彈框。
——這裡的彈框,我們用不到代理,可是為了複習代理知識,把self(控制器)設定為它的代理。
- (IBAction)nextQuestion { if (self.index==self.questions.count-1) { UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"恭喜" message:@"闖關成功!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil]; [alert show]; return; }}
——然後在開頭的地方遵守協議
@interface ViewController ()<UIAlertViewDelegate>
——最後能夠實現協議方法,也相當於能夠實現監聽。
比方以下這個button能夠監聽使用者點擊了哪個button,並能夠做一些反應,比方輸入是點擊了哪個button序號。
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ NSLog(@"%d",buttonIndex);}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >
(4)延伸一下,還有一種提示框。
ActionSheet
——提示框的展示稍有差別,它的出現是“在哪個視圖中出現”,還有其它出現方式。
- (IBAction)nextQuestion { if (self.index==self.questions.count-1) { UIActionSheet *sheet=[[UIActionSheet alloc]initWithTitle:@"恭喜通關!" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"確定" otherButtonTitles:@"其它", nil]; [sheet showInView:self.view]; return; }}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >
【iOS開發-56】案例BUG:button的enabled、控制項的userInteractionEnabled以及兩種提示框UIAlert和UIActionSheet