2011年4月27日 星期三

view switcher(三)-SwitchViewController








//

//  SwitchViewController.h

#import <UIKit/UIKit.h>

@class BlueViewController;
@class YellowViewController;

@interface SwitchViewController : UIViewController {
BlueViewController *_blueViewController;
YellowViewController *_yellowViewController;

}

@property (nonatomic, retain) BlueViewController *_blueViewController;
@property (nonatomic, retain) YellowViewController *_yellowViewController;

-(IBAction)switchViews:(id)sender;

@end

修改MainWindow.xib
按兩下MainWindow.xib開啓IB, 必須再建立用來表示root controller的實例; 因為IB程式庫沒有SwitchViewController, 所以必須加入一個view controller,再將其類別改為SwitchViewController
(圖一)將UIViewController拉到nib時所產生的view



接下來建立root controller的view, root controller的view將包含螢幕下方的一個工具列
之前我們將UIViewController拉到nib主視窗時, 產生了一個新視窗(如第一張圖), 要在此視窗為root controller(SwitchViewController)建立view

SwitchViewController主要任務是切換BlueView與YellowView, 所以必須有可以讓使用者改變檢視的方法, 所以在工具列增加一按鈕讓使用者切換檢視

從Library拖曳View到(圖一), Library拖曳Toolbar
更改button name 為 Switch Views

接著將動作與button連接
選擇MainWindow.xib的Switch View Controller, 選擇Inspector的Connections Inspector, 將switchViews方法連結至Toolbar的button (如下圖)

之前在SwitchViewControllerAppDelegate.h建立IBOutlet (_switchViewController), 因此應用程式可以連接到SwitchViewController的實例, 並在主要的應用程式視窗中加入sub view,..  所以必須在nib中將SwitchViewController實例連接到此IBOutlet
選擇Switch View Controller App Delegate, 選擇Inspector的Connections Inspector,將_switchViewController連接到SwitchViewController的實例, 如下圖

儲存nib, 開始編輯SwitchViewController.m

//  SwitchViewController.m
//  SwitchViewController

//

#import "SwitchViewController.h"

#import "BlueViewController.h"
#import "YellowViewController.h"

@implementation SwitchViewController

@synthesize _blueViewController;
@synthesize _yellowViewController;

-(IBAction)switchViews:(id)sender
{
//先檢查_yellowViewController的view之上層view是否為nil
if (self._yellowViewController.view.superview == nil
{
//檢察_yellowViewController是否被建立, 若尚未被建立, 則下列if成立 
if (self._yellowViewController == nil
{
YellowViewController *yellowController = [[YellowViewController alloc]
  initWithNibName:@"YellowView" bundle:nil];
self._yellowViewController =yellowController;
[yellowController release];
}
[_blueViewController.view removeFromSuperview];
[self.view insertSubview:_yellowViewController.view atIndex:0];
}
else {
if (self._blueViewController == nil
{
BlueViewController *blueController = [[BlueViewController alloc]
  initWithNibName:@"BlueView" bundle:nil];
self._blueViewController =blueController;
[blueController release];
}
[_yellowViewController.view removeFromSuperview];
[self.view insertSubview:_blueViewController.view atIndex:0];
}

}


- (void)viewDidLoad {
BlueViewController *blueController = [[BlueViewController alloc
  initWithNibName:@"BlueView" bundle:nil];
self._blueViewController = blueController;
//將藍色檢視加入成為根檢視的子檢視, 索引值為0表示此子檢視放在所有東西的最下層,
//如此可確保工具列永遠都看的見
[self.view insertSubview:blueController atIndex:0];
[blueController release];
    [super viewDidLoad];
}


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
if (self._blueViewController.view.superview == nil
{
self._blueViewController = nil;
}
else 
{
self._yellowViewController = nil;
}

}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
[_blueViewController release];
[_yellowViewController release];
    [super dealloc];
}


@end

將兩個檢視加入按鈕觸發動作

//
//  BlueViewController.h

#import <UIKit/UIKit.h>

@interface BlueViewController : UIViewController {

}

-(IBAction)blueButtonPressed;

@end


//
//  YellowViewController.h
#import <UIKit/UIKit.h>

@interface YellowViewController : UIViewController {

}

-(IBAction)yellowButtonPressed;

@end

將兩個檢視與 xib連結,  分別開啓BlueView.xib , YellowView.xib
ex: double click "BlueView.xib", select File's Owner, 按下command+4呼叫Identity Inspector
NSObject 改為 BlueViewController

更改view背景顏色為藍色

增加button, 連接blueButtonPressed, 除了連接IBAction, 還要將BlueViewController的View接口連接到nib中的view

YellowView的做法也與BlueView相同








view switcher(二)-SwitchViewControllerAppDelegate

開啓新專案, 選擇 Window-based Application, 分別建立3個UIViewController subclass (不含xib);
1. SwitchViewController
2. BlueViewController
3. YellowViewController
再建立2個xib
1. BlueView
2. YellowView

//

// SwitchViewControllerAppDelegate.h

#import

@class SwitchViewController;

@interface SwitchViewControllerAppDelegate : NSObject {

UIWindow *window;

SwitchViewController *_switchViewController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet SwitchViewController *_switchViewController;

@end

剛剛輸入的IBOutlet宣告目的是在 應用程式啓動時 將root controller(_switchViewController)的view加入到應用程式的主視窗, 所以必須建立IBOutlet

//

// SwitchViewControllerAppDelegate.m

#import "SwitchViewControllerAppDelegate.h"

#import "SwitchViewController.h"

@implementation SwitchViewControllerAppDelegate

@synthesize window;

@synthesize _switchViewController;

#pragma mark -

#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

[self.window addSubview:_switchViewController.view];

[self.window makeKeyAndVisible];

return YES;

}

- (void)dealloc {

[window release];

[_switchViewController release];

[super dealloc];

}

@end

view switcher (一)

探索iPhone程式開發實戰chapter 6心得:
切換兩個view, 分別是藍色背景與黃色背景的view, 使用了3個view controller,

2011年4月25日 星期一

Windows XP 網際網路連線共享 (Internet Connection Sharing, ICS) 之設定

使用電腦(A)的無線網路接收訊號 , 再經由RJ45接線給其他電腦(B)上網使用,
兩台電腦可同時透過wireless上網
wireless --> PC(A) -->wire --> PC(B)
這裡要選擇已經連上線的無線網卡
要選擇接線方式提供網路訊號給其他電腦的網路連線

google document test

2011年4月19日 星期二

[轉] Navigation Controller建立步驟

from : http://blog.joomla.org.tw/
Navigation(導覽) Controller是一個可用來導覽內容的方式。以下有兩種方式可以將這個控制器建立到應用程式中,一種是使用initWithNibName的方式,另一種則是利用Interface Builder協助載入view的方式。

Rihanna - Only Girl (In The World)

2011年4月13日 星期三

[轉] Timer / 計時器的基本使用方法

from : http://www.furnace.idv.tw

[轉] 應用程式狀態的存取

from : http://www.furnace.idv.tw


[轉] Alerts 警告訊息的使用方法

from : http://www.furnace.idv.tw

[轉] 在 MapView 上加入註解說明的大頭針 Pin

from : http://www.furnace.idv.tw

[轉] MapView 地圖註解大頭針 Pin 的相關設定

from : http://www.furnace.idv.tw


[轉] MapView 上使用圖片取代原大頭針註解 Pin 圖示

from : http://www.furnace.idv.tw


[轉] 使用 UISwipeGestureRecongnizer 實做手勢切換畫面

from : http://www.furnace.idv.tw


[轉] UITextField 輸入結束後的收起小鍵盤的方式

from : http://www.furnace.idv.tw
UITextField 提供一個文字框可供使用者輸入,在我們使用 Interface Builder 編輯的時候可以看到許多關於 UITextField 的屬性,但是卻沒有一項屬性是告訴我們在輸入結束按下 Return Key 時小鍵盤要如何收起來,所以在這裡將介紹兩種收起小鍵盤的方法,分別是點擊 Return Key 與點擊 UITextField 以外的背景。(View-based Template)

[轉] 使用 UIApplication 呼叫 iOS 內建電子郵件 App

from : http://www.furnace.idv.tw


[轉] 使用 UIApplication 呼叫 iOS 內建地圖 App

from : http://www.furnace.idv.tw


[轉] 使用 UIApplication 呼叫 iOS 內建撥號 App

from : http://www.furnace.idv.tw


[轉] 使用 UIApplication 呼叫 iOS 內建訊息 App

from : http://www.furnace.idv.tw


[轉] 設定應用程式上的 Badge

from : http://www.furnace.idv.tw


[轉] Status Bar 的二三事

from : http://www.furnace.idv.tw

Status Bar 就是畫面最上方的內建系統狀態列,提供即時的收訊強度、服務名稱、電量等等資訊,當然這個 Status Bar 也是可以由程式來控制,下面我們就來看看幾個與 Status Bar 有關的簡單例子。

[轉] 使用 arc4random() 取得亂數值的方法

from : http://www.furnace.idv.tw

取得亂數的方式有很多,筆者認為其中 arc4random() 函式最為好用,

[轉] 使用 Animation 解決小鍵盤擋住 UITextField 的問題

from : http://www.furnace.idv.tw

有的時候因為使用上的需求,在設計介面時不得不把像是 UITextField 這類會觸發螢幕小鍵盤的物件放在畫面底端,這時候就會產生一個問題,當點選 UITextField 輸入時,小鍵盤自動由下彈出擋住原先的 UITextField,因此在輸入當下反而看不到實際上到底輸了些什麼。

[轉] 將字串以多行呈現於 UILabel 上

from : http://www.furnace.idv.tw/

[轉] 設定背景影像

from : http://www.furnace.idv.tw/


[轉] Info.plist 的讀取方法

from : http://www.furnace.idv.tw/

所謂的 Info.plist 就是專案內一個已經結構化好的資料清單,其中存放該專案最基本的設定資料以及相關參數,當然使用者也可以透過 Add Row 來增新欄位添加資訊,如下圖。

[轉] 簡易的 .plist存 取方法

from : http://www.furnace.idv.tw/


2011年4月12日 星期二

[轉] 防止 Device 自動進入待機狀態的方法

from :
在 Device 閒置一段時間後會進入待機模式(自動睡眠),這項機制主要是用來節省電源並提昇電池壽命,可是在某些情況下又想要忽略此機制。例如回合制的遊戲,或是因為連線與運算造成的短暫等待,此時使用者可能需要不定時的在畫面上進行點擊,告訴系統使用者仍然在操作中並沒有離開,以免進入待機模式。 為了避免此窘境,可以使用下列程式碼來解決此問題。
[UIApplication sharedApplication].idleTimerDisabled = YES;
執行上述程式碼之後,在執行此應用程式期間,系統將不會進入待機模式,直到關閉此應用程式為止。