2017年3月29日 星期三

for xamarin ios,在UI builder/Deigner 對最底層的viewc設定好透明度為半透明時,上面的view也跟著變成了半透明了,如何是好?

相信用xamarin開發使用者界面時,大家多少都會用到設計modal view的時候
今天不討論如何做modal view(有興趣的朋友自己去查「ModalPresentationStyle」&「PresentViewController」等相關指令)
而是會遇到一個問題:如果只是單純把那個modal ViewController的view的background color設定為「clear」的話,那顯示出我們設計的modalview時,會跟母畫面沒有區隔(如果你有為這modal view加些陰影就比較好一點)

那如果做到跟UIAlertView一樣在對話框的外圍做出半透明?
這時候你會想直接在那個Modal ViewController的底色選灰色,然後設定alpha值,是吧,
怪事就發生了,連帶上面的這個淺青色的view也變成半透明的,像這樣....
(這張我是在對話框那裡加再加了一層下去,看仔細點,母視窗UITable Cell的線快看到,如果項目很多個的話,字就會出現在淺藍對話框上面,真的是好可怕的靈異現象啊)

就這樣滿足了?還是要放棄了?
放心啦,這真的是要coding才能解決的,不要老是認為View Designer就一切幫你做好了,
有些人也是有遇到這狀況,答案是不要在UI builder中打轉、加幾個圖層,而是一行指令
(當然你的最底層view的背景色還是要設定為clear,透明度設回去為「1」)
===================就是這句===================================
View.BackgroundColor = UIColor.Black.ColorWithAlpha( new System.nfloat( 0.4));
==========================================================
結果如下圖:

這樣,就是我們要的如同UIAlertView那樣有底色又modal的對話框了
更多細節,
請參考這裡




2017年3月3日 星期五

for Extjs4,如何在tab 頁籤切換前先做確認動作

如果是直接想法是在beforetabchange事件中等 Ext.Msg.confirm傳回true/false
問題是 Ext.Msg.confirm是非同步的,也就是在出現 Ext.Msg.confirm頁籤就已經切換了
如何是好?
有個變通的方式--先在beforetabchange中傳回false,等 Ext.Msg.confirm再手動切換activeTab
參考以下片段
===============================
 beforetabchange: function (tabPanel, newCard, oldCard, eOpts) {
//...如果沒異動,直接return true...
//需確認
Ext.Msg.confirm("modified ", 'Content modified but not saved yet<br>Are you sure to exit current tab?',
                                                             function (answer) {
                                                                 if (answer == 'yes') {
                                                                     tabPanel.suspendEvents();//為什麼要做suspendEvent?因為以下的setActiveTab又會觸發beforetabechange事件,
                                                                     tabPanel.setActiveTab(newCard);//手動切換tab
                                                                     tabPanel.resumeEvents();//恢復事件傾聽
                                                                 } else {
                                                                 }
                                                             });
  //always return false,since we will active tab by confirmation.
    return false;
=========================================
來源,參考這裡
加油了,