2017年7月29日 星期六

for xamarin ios ,用Nib.Instantiate(null, null)[0]時,出現「 System.InvalidCastException: Specified cast is not valid. 」錯誤訊息

如果只是設計一般iphone用的custorm UIView,你應該不會用到xcode去改view的大小,了不起用ipad的view去做scrollview的subview
可是如果用ipad要去做更大,超過landscape寬度的view,那你不只是在 simulated matrix的size設定為「freeform 」之外,你還要去xcode改他的寬度才可以(當然日後這個view也是要放在scrollview中才能捲動的)
有時我們會用temp.xib去xcode做這些上述動作,再回來把temp.xib的內容copy past到我們正式要用的xib檔中,可是在用xib檔產用view時,卻出現了「 System.InvalidCastException」訊息
=====在那個UIView .cs中.....=======================
....
....
...
 [Register("UIMyViewClass ")]
    public class UIMyViewClass : UIView {
     ....
    .....
    public static UIMyViewClass CreateMyView() {
            return (UIMyViewClass )Nib.Instantiate(null, null)[0];
     }
}
=======================================
在上述發生「 System.InvalidCastException: Specified cast is not valid. 」錯誤訊息
真害,明明以前都很正常的啊...
嗯,問題就出在xib檔中,
========================================
...
....
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UIMyViewClass "/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="1" customClass="UIMyViewClass ">
...
....
========================================
就是要對一下「customClass」有沒有錯,這是這麼簡單罷了



2017年6月27日 星期二

Xamarin IOS:label中的Attributed Text怎麼用啊?

剛開始做xamarin畫面設計時真的是抱怨連連,尤其是習慣了html的人
雄雄想要在文字標籤中加個底線,卻一直不知如何著手.
label物件中有個文字屬性叫AttributedText,就可以派上用場了
(事實上你在GUI builder中找label的"text"屬性欄位,就Plain & Attribute,但是你選了「Attributed」會出現「not support in this version」.....沒錯啦,在xcode設計工具中是有的選)
回到問題,要做個堂堂正正的...不,要做有個底線的文字標籤,就參考以下的做法:
----------------------------------------
myLabel.AttributedText = new NSAttributedString(
                "別踩了我的底線",
                underlineStyle: NSUnderlineStyle.Single);
----------------------------------------

事實上這個機制,還可以套用更複雜的html語法
==================================
var attr = new NSAttributedStringDocumentAttributes();
            var nsError = new NSError();
            attr.DocumentType = NSDocumentType.HTML;

            var myHtmlText = "<u>I服了 You</u>";
            var myHtmlData = NSData.FromString(myHtmlText, NSStringEncoding.Unicode);
            myLable.AttributedText = new NSAttributedString(myHtmlData, attr, ref nsError);
==========================
來源參考:
1.https://forums.xamarin.com/discussion/23670/how-to-display-html-formatted-text-in-a-uilabel
2.https://stackoverflow.com/questions/15643232/underline-text-in-uilabel-in-monotouch-porting-objc-code
3.https://www.youtube.com/watch?v=5-ZnV3jQd9I

以上,加油了!!

2017年6月12日 星期一

for Xamarin IOS : 為什麼「 NSData.FromString(uri)」總是傳回空(null)值!?

公司已經把觸手從賣場伸向行動設備了
原本在pos上的資源可以用http下載的方式跟手機平台契合
在做商品查詢中一定會用到圖片下載
明明在公司內部網路就正常,
可是一旦用internet時,「var data=NSData.FromString(uri)」就會傳回空值,連帶接下來的「UIImage.LoadFromData(data);」它就死掉了
Google一下,原來這個URL是要用https才行,
蘋果真的是太龜毛了可是我就是要用非https的網路資源啊也不是無可救藥啦只要在info.plist最後加上這個設定
==========================
<key>NSAppTransportSecurity</key>
 <dict>
    <key>NSAllowsArbitraryLoads</key> 
   <true/>  
</dict>
 ================================
就可以了來源在這裡
大家一起加油吧

2017年6月5日 星期一

for Extjs4 ,如何正確使用Ext.TaskManager.start & Ext.TaskManager.stop

範例如下:
===================================
var config = {


    msg: 'Display Time',
    modal: true,
    buttons: Ext.Msg.OKCANCEL,
    fn: displayTime
}

Ext.MessageBox.msgButtons[0].setText('Start');
Ext.MessageBox.msgButtons[3].setText('Stop');

Ext.MessageBox.show(config);

function start_task() {
   Ext.MessageBox.updateText('????:' + Ext.util.Format.date(new Date(), 'Y-m-d g:1:s A'));
}

var task = { // moved outside function so it was not called over and over
    run: start_task,
    scope: this,
    interval: 1000
}

function displayTime(id) {
 
    if (id == 'ok') {
       // task was here ... was not always defined due to if statement; was also recalled each time
       Ext.TaskManager.start(task);
    } else {
        Ext.MessageBox.updateText('Paused!');
        Ext.TaskManager.stop(task);
    }
};
============I tried,it works===========================
來源網址在此
大家一起加油吧

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;
=========================================
來源,參考這裡
加油了,

2017年2月18日 星期六

for Extjs4 numberfield的事件控制之一二事

numberfield好用在於有提供格式、最大最小值,以及spinner做微調加減之用
不過事件控制上有一點小小的問題
如果只用keyup/keydown event listener的話,是無法收到spinner被click的事件
但如果用了"change" event listener的話,那麼會在form.setValues(只要是對這欄位設定值時)
就會觸發change事件,如何是好?
 既然問題是出在事件,那就把事件擱置處理吧
example:
-------假設nubmerFieldWithSpinner的listeners 有change事件--
        var form = me.down('form').getForm();
        var  nubmerFieldWithSpinner = form.findField('.....');
        nubmerFieldWithSpinner .suspendEvents();
        form.setValues(......);
        nubmerFieldWithSpinner .resumeEvents(false);
----------------------------------------------------------------------------
參考出處在此
加油了,

2016年8月23日 星期二

如何自行定義紙張大小

不必找每一台印表機去一一設定
當你進到「控制台」->「所有控制台項目」->「裝置和印表機」視窗時
你或許會見到一堆設備,但就是沒看到「列印伺服器內容」
這時,就直接隨便點一台印表機(如果點的是其他設備,也不會有這一項)
待一秒之後,「列印伺服器內容」就會出現了
參考以下影片:

2016年8月18日 星期四

如果script 檔太大,無法讀入mssql sql server management studio的查詢視窗來執行,如何是好

恭喜你,
你的案子擴展已經如同宇宙膨漲的速度一樣了
SQL Server Management Studio無法讀入很大的script file時
就用SQLCMD吧
參考語法如下:
=========================================
sqlcmd -U myUser -P myPassrowrd -S mySQLServer -d myDatabase -i "the script file path"
========================================
其中的 U、P、S、d、i 都是有大小寫之分
更多參數,請參考這裡

2016年5月29日 星期日

一些不錯的線上即時檢視/測試你的javascript 資源網站

keyword: test run online
這裡列出些不錯的站台
比較常被找到的是fiddle
http://jsfiddle.net/vfmfmaxo/
就sencha user來說,那就是sencha fiddle了,

加油了