2012年8月28日 星期二

MBProgressHUD 方便建造thread, 並且不檔到navigation item(比如back)

http://github.com/matej/MBProgressHUD

.h檔部分
#import "MBProgressHUD.h"  
.....{
     
    MBProgressHUD *HUD;
}

.m檔部分
- (voidviewDidLoad{
    
    [super viewDidLoad];

    HUD = [[MBProgressHUD alloc] initWithView:self.tv];
    // 這裡是navigation的item如back在有loading image時可以用的關鍵,記住initWithView不可以指定  self.view,因為這樣以來loading會覆蓋過整個view,關鍵是要另外指定一個較小不是全範圍的view如table view來init.
    [self.tv addSubview:HUD]; 
    // 這裡則是要指定那個較小的view去做addSubview:HUD,如此以來執行的時候也可以按navigation的item了

    HUD.delegate = self;  
    HUD.labelText = @"Loading";  
    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];
}

- (void) myTask {  
     // Do something usefull in here instead of sleeping ...
     // 背景運作的code如網路載入資料等放這...
}

- (void)hudWasHidden { 
    // Remove HUD from screen when the HUD was hidded  
    [HUD removeFromSuperview];
}

2012年8月20日 星期一

兩個view controller資料傳送呼叫顯示等


---------------------------------------------------------------------------

1 呼叫 2 出來
[self performSegueWithIdentifier:@"upload to location" sender:nil];

---------------------------------------------------------------------------

1 傳送data到 2

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    id dv = segue.destinationViewController;
    [dv setValue:@"123,111" forKey:@"gps"];
}

---------------------------------------------------------------------------

---------------------------------------------------------------------------
2 返回 1 (不透過nav bar 的back button)


    UIViewController *prevVC = [self.navigationController.viewControllers objectAtIndex:1];//1 is level
    [self.navigationController popToViewController:prevVC animated:YES];

指定回去的leval,1就是leavl
---------------------------------------------------------------------------


2 傳送data回 1 (需要實作delegate)

step1 :(在page2的.h檔定義delegate)



//--delegate部分
@protocol page2Delegate <NSObject>

@optional
- (void)passValue:(NSString *)value;

@end
//--

//--
@property (nonatomic, weak) id<LocationDelegate> delegate;
//--

---------------------------------------------------------------------------

step2 : 在page1裡載入delegate

#import "page2.h"//實作協定用

@interface uploadViewController : UIViewController<page2Delegate>


並在page1.m檔裡面實作delegate 方法

- (void)passValue:(NSString *)value{
     //在這裡實作協定
}

---------------------------------------------------------------------------

strp3:在pag1呼叫page2時,指定自己是page2的delegate


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    id dv = segue.destinationViewController;
    [dv setValue:self forKey:@"delegate"];
}
---------------------------------------------------------------------------
step4 :在page2適當的call method,讓delegate執行這個method

[self.delegate passValue:@"pass from 2 data string"];


////類似(  performSegueWithIdentifier + prepareForSegue )

    /*
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    
    locationViewController *uploadView = [storybord instantiateViewControllerWithIdentifier:@"location"];
    [self.navigationController pushViewController:uploadView animated:YES];
     */