2013年1月23日 星期三

iOS - Keyboard resigns

iOS  離開textField,按背景時,鍵盤降下 Keyboard resigns




//Did End On Exit  輸入完畢時鍵盤降下

- (IBAction)textFieldReturn:(id)sender { //這裡的sender應該是keyboard
    
    [sender resignFirstResponder];
}


//Touch Down 按背景時,鍵盤降下
- (IBAction)backgroundTouched:(id)sender { //這裡的sender應該是背景
    
    [_tempTextField resignFirstResponder];
}


iOS6 - Seque btw 2 View Controllers

iOS6 使用 Segue 傳輸兩個View Controller 之間的字串資料


Storyboard的設定:



在Scene1 的 TextField 輸入字串 "I love you." 按下按鈕,資料將傳到 Scene 2 的 TextField. 如下圖:

 然後在Scene2編輯後再回傳資料到Scene1,如下:

    
  


分別為這兩個ViewControllers建立兩個Classes,如下:
--------------------------------------------------------------
SceneOneViewController.h: 

#import <UIKit/UIKit.h>

@interface SceneOneViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *SceneOneTextField;
@property (strong, nonatomic) NSString *textOne;

@end


___________________________________________
SceneOneViewController.m: 


#import "SceneOneViewController.h"
#import "SceneTwoViewController.h"

@interface SceneOneViewController ()

@end

@implementation SceneOneViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


//Pass data in scene one to text in scene 2
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    
    SceneTwoViewController *destination = [segue destinationViewController];
    destination.text = _SceneOneTextField.text;
    
}

//Receive data from scene 2 and display in scene 1; the value of var "textOne" should be set in scene 2.m
- (IBAction)returned:(UIStoryboardSegue *)segue {

    _SceneOneTextField.text = _textOne;
}

@end


注意:在Storyboard的Scene2 Controller 裡,將按鈕連到下方綠色的小方格(Exit),選擇上述的 IBAction: returned。讓它離開Scene2回到Scene1時,要執行這個動作,如下:






________________________________________________
SceneTwoViewController.h: 


#import <UIKit/UIKit.h>

@interface SceneTwoViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *SceneTwoTextField;
@property (strong, nonatomic) NSString *text;

@end
________________________________________________
SceneTwoViewController.m: 


#import "SceneTwoViewController.h"
#import "SceneOneViewController.h"

@interface SceneTwoViewController ()

@end

@implementation SceneTwoViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
_SceneTwoTextField.text = _text;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


//Pass the data from scene 2 to textOne
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    
    SceneOneViewController *destinationVC = [segue destinationViewController];
    destinationVC.textOne = _SceneTwoTextField.text;
    
}

@end



2012年11月18日 星期日

捲動 TextView 可以捲動 (scroll) 內容


main.java:

contentTextView = (TextView) findViewById(R.id.contentTextView);
contentTextView.setMovementMethod(ScrollingMovementMethod.getInstance()); //可以Scroll textview 的內容


res/layout/main_activity_layout.xml:


<TextView
        android:id="@+id/textView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:maxLines="15"
        android:scrollbarStyle="outsideInset"
        android:scrollbars="vertical"
        android:singleLine="false"
        android:text=""
        android:textColor="#00FF00"
        android:textSize="20dp" />

2012年10月22日 星期一

iOS - Find a String and Replace


找尋字串裡是否含有某一個字或某一段文字,如果確定找到,將之取代為另一個字或另一段文字:

e.g.
I am in a bad mood.  ==>  I am in a good mood.
我今天心情很。  ==>   我今天心情很

*************************************************

- (void) viewDidLoad {

NSString *original = @"I am in a bad mood.";

NSLog (@"After replace, the result = %@", [self replaceStringWithSomeCharacters: original]);

}

- (NSString *) replaceStringWithSomeCharacters : (NSString *) aString{
    
 // 1. 定義要換掉的字串
    NSRange search = [aString rangeOfString:@"bad" options:NSCaseInsensitiveSearch];
  
//2. 建立一個新字串,值為 ""
    NSString *afterReplace = @"";

//3. 如果有找到要替換的"bad"
    if (search.location != NSNotFound) {

//4. 以"good" 替換掉 search 
        afterReplace = [aString stringByReplacingCharactersInRange:search withString:@"good"];

//5. 回傳替換後的結果
        return afterReplace;
    }
  
//4. 字串中找不到有"bad"的地方,回傳原來的字串
    return aString;
}

2012年10月6日 星期六

iOS --.xlsx 檔轉成 .csv 檔,準備之後轉成 sqlite檔使用



以 mac 的作業系統為例:
將 Excel 的 .xlsx 檔轉成 .csv 的步驟:

1. 建立一個 .xlsx 檔



 2. 另存成 .csv 檔

 3. 以 text 瀏覽器打開,在此我使用 TextWrangler 。到 Edit --> Document Options:
   
             
 4. 將它 copy 入 Xcode 的 project 裡以用建立 sqlite 檔使用。
     要確定 .csv 檔在 project 裡沒問題,可以點它,看中文有無亂碼:
     如果見到如下,就沒問題:

     學生;國文;英文
     John;89;90
     Mary;56;83
     Peter;78;54


*PS 在 .xlsx 裡輸入資料時,請不要用英文的分號 (;)。如果真的需要分號,請以中文的方式輸入(;)。這樣才能確保在程式裡轉檔成sqlite檔案時不會出問題!!!