Translate

顯示具有 Object-C 標籤的文章。 顯示所有文章
顯示具有 Object-C 標籤的文章。 顯示所有文章

2016年5月6日 星期五

事件用字串來呼叫


#include <objc/message.h>

- (IBAction)buttonevent:(id)sender {

NSDictionary *itemDic = [[NSDictionary alloc]init];

  SEL s = NSSelectorFromString(@"eventname:");
        if ([self respondsToSelector:s]) {
            ((id (*)(id, SEL, NSDictionary*))objc_msgSend)(self, s, itemDic);
        }

}

- (void) eventname:(id)obj
{
    //do something...
}

nsarray有包含字串

 NSArray *ar=@[@"john",@"bally",@"bill"];
 NSString *check=@"john";
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", ar];

    BOOL result = [predicate evaluateWithObject:check];

2016年4月8日 星期五

webview scales frame

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    webView.scalesPageToFit = YES;
    webView.contentMode = UIViewContentModeScaleAspectFit;
    webView.scrollView.scrollEnabled = NO;
    
    CGSize contentSize = webView.scrollView.contentSize;
    CGSize viewSize = webView.bounds.size;
    
    float rw = viewSize.width / contentSize.width;

    webView.scrollView.minimumZoomScale = rw;
    webView.scrollView.maximumZoomScale = rw;
    webView.scrollView.zoomScale = rw;
    


}

2016年2月2日 星期二

UIButton Title



UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

放置 set the button title by state


[rightButton setTitle:cid forState:UIControlStateNormal];

取得 get the button title by state


[rightButton titleForState: UIControlStateNormal]


狀態 state can change you want

 UIControlStateNormal       //正常
 UIControlStateHighlighted  
 UIControlStateDisabled    //無作用狀態
 UIControlStateSelected
 UIControlStateFocused 
 UIControlStateApplication  
 UIControlStateReserved 

2015年11月26日 星期四

uiview hide show animation

UIView animation


    [UIView transitionWithView:self.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^(void){
        [self.view setHidden:NO];

    } completion:nil];

UIViewAnimationOptionTransitionFlipFromLeft 可以替換下列動畫

沒有動畫
   UIViewAnimationOptionTransitionNone          

翻轉動畫↪↩
    UIViewAnimationOptionTransitionFlipFromLeft    
    UIViewAnimationOptionTransitionFlipFromRight   

翻頁動畫
    UIViewAnimationOptionTransitionCurlUp         
    UIViewAnimationOptionTransitionCurlDown       

顯現動畫
    UIViewAnimationOptionTransitionCrossDissolve   

上下折曡動畫↑↓
    UIViewAnimationOptionTransitionFlipFromTop   
    UIViewAnimationOptionTransitionFlipFromBottom 

2015年11月25日 星期三

UIImage load Memory

ref:http://stackoverflow.com/questions/15439564/simple-resizing-of-uiimage-in-xcode


UIImage 讀取方式有以下兩種

UIImage *img = [UIImage imageNamed:@"test.png"]; // caching


UIImage *img = [UIImage imageWithContentsOfFile:@"test.png"]; // no caching


如果還是一樣大,還是改變你的尺寸吧一m一+

- (UIImage*)resizeImage:(UIImage *)image
{
    CGSize origImageSize = [image size];
    CGRect newRect = self.view.frame; //新的frame,要改的size
    float ratio = MAX(newRect.size.width / origImageSize.width,
                      newRect.size.height / origImageSize.height);
    UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 0.0);
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect
                                                    cornerRadius:5.0];
    [path addClip];
    CGRect imageRect;
    imageRect.size.width = ratio * origImageSize.width;
    imageRect.size.height = ratio * origImageSize.height;
    imageRect.origin.x = (newRect.size.width - imageRect.size.width) / 2.0;
    imageRect.origin.y = (newRect.size.height - imageRect.size.height) / 2.0;
    [image drawInRect:imageRect];
    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return smallImage;

}

2015年11月11日 星期三

Sheet can not be presented because the view is not in a window



Cell View

[actionSheet showInView:self.superview];

     
View Control

[actionSheet showInView:self.view];

json post/ get

Get

NSString *url="http://www/getid/id=123";
NSString *result= [self Get:url];


Post - List<string> Data

NSString *url="http://www/post/update";
NSMutableArray *list = [[NSMutableArray alloc]init];
[list addObject:name];      //name is NSString
[list addObject:mobile];    //mobile is NSSTring
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:list options:0 error:nil];
NSString *result= [self Post:url value:jsonData];


Funtion

- (NSString*) Post:(NSString*)url
             value:(NSData*)requestData
{
    
    NSURL *theURL = [NSURL URLWithString:url];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [theRequest setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    theRequest.timeoutInterval=10.0;
    [theRequest setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPBody: requestData];

    return [self HttpResult:theRequest];
}

-(NSString*) HttpResult:(NSURLRequest*) urlRequest
{

    NSURLResponse *resp = nil;
    NSError *err = nil;
    
    NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
                                         returningResponse:&resp
                                                     error:&err];
    
    if([data length]>0 && err == nil)
    {
        return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
    else
    {
        return @"nowifi";
    }
    return @"";

}

2015年11月10日 星期二

Xcode Object-C init


NSString Init

[NSString stringWithFormat:@"%@/%@",@"str1",@"str2"];

NSDictionary Init

NSDictionary *dir=[NSDictionary dictionaryWithObjectsAndKeys:
                       @"value-a",@"key-a",
                       @"value-b",@"key-b",
                       nil];

NSArray Init

NSArray *ar=@[@"a",@"b",@"c"];

NSMutableArray Init

NSMutableArray *ar=[NSMutableArray arrayWithObjects:@"",@"", nil];

2015年10月15日 星期四

Xcode object-c 常用轉換


NSMutableArray → NSArray

    NSArray *array = [NSArray arrayWithArray:mutableArray]; //array is empty

    NSArray *array = [mutableArray copy]; //array is nil


NSDate↔ NSString

   NSDateFormatter *f = [[NSDateFormatter alloc] init];

    [f setDateFormat:@"yyyy-MM-dd"];

    NSString *strDate = [f stringFromDate:[NSDate date]];

    NSDate *date = [f dateFromString:@"2015-10-04"];


NSNumber↔int


    int i=10;
    
    NSNumber *inumber=[NSNumber numberWithInt:i];
    
    i=[inumber intValue];

UUID/GUID→ NSString


 NSString *UUID=[[NSUUID UUID] UUIDString];

intNSString


  int value=0;
  NSString *str=[@(value) stringValue];

  value =[str intValue];


2015年4月9日 星期四

pickerView


//如果不想用拉的宣告顯示資料位置,也在可在初始化這樣設定
//self.picker.dataSource = self;

//self.picker.delegate = self;


//顯示選取資料有幾欄
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

//顯示選取資料筆數
- (long)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return list1.count;
}

// 顯示選取資料
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [list1 objectAtIndex:row];
}

//顯示目前選取哪筆資料
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSLog(@"select:%@",[list1 objectAtIndex:row]);
}

DataPicker


//選擇時間格式
- (IBAction)selectvalue:(UIDatePicker *)sender {
    
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSLog(@"設定時間:%@",[fmt stringFromDate:sender.date]);
    
}


//另一種寫法,如果你要將現在的時間跟選的時間做倒數計時的話
- (IBAction) selectvalue:(UIDatePicker *)sender {
    
    NSTimeInterval n = sender.countDownDuration;
    NSLog(@"倒數計時秒數為:@%0f",n);
}

tableView



View

//回傳目前有幾個項目
- (NSInteger)numberOfSectionsInTableView:(UITableView *)TableView
{
    return 2;
}


//回傳目前列表的數量
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger n =0;
    
    switch (section) {
        case 0:
            n=[list count];  //陣列的數量
            break;
        case 1:
            n=[list2 count];
            break;
    }
    
    return n;
}


//顯示列表
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *indicator=@"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:indicator];
    
    
    if(cell==nil)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indicator];
    }
    
    switch (indexPath.section) {
        case 0:
            cell.textLabel.text=[list objectAtIndex:indexPath.row];
            break;
        case 1:
           cell.textLabel.text=[list2 objectAtIndex:indexPath.row];
            break;
    }
    
    return cell;
}


//顯示列表上方的標題
-(NSString*) tableView:(UITableView*) tableView titleForHeaderInSection:(NSInteger)section
{
 NSString * header= @"";
    
    switch (section) {
        case 0:
            header=@"標題1";
            break;
        case 1:
            header=@"標題2";
            break;
    }
    return header;
}

Select

//點選資料顯示
-(void)tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%@",[list objectAtIndex:indexPath.row]);
}


Delete

//回傳列表項目的按鈕是刪除
-(UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}

//刪除選擇的項目
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case 0:
           [list removeObjectAtIndex:indexPath.row];
            break;
        case 1:
            [list2 removeObjectAtIndex:indexPath.row];
            break;
    }
    

    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                     withRowAnimation:UITableViewRowAnimationFade];
    
}

Add

//上方工具列的新增,工具列在拉進來此做動作,工具列不要拉到View裡面了,不然會跟著View的列表新增一直往下拉。

- (IBAction)insertData:(id)sender {
    static NSInteger i;
    
    
    [list addObject:[NSString stringWithFormat:@"%ld",(long)i++]];
    
    for(UIView *view in self.view.subviews)
    {
        if([view isKindOfClass:[UITableView class]])
        {
            UITableView *t = (UITableView *)view;
            [t reloadData];
            break;
        }
    }
}

Sort

//列表最右邊可以用滑鼠拖移,點住不放即可拉至想移往的地方
//這一個function也是工具列的按鈕拉下來了,按一下編輯模式的拉開與關閉
- (IBAction)edit:(UIBarButtonItem *)sender
{
    if(self.mytable.isEditing)
    {
        sender.title = @"Edit";
        self.mytable.editing = NO;
    }
    else
    {
        sender.title = @"Done";
        self.mytable.editing = YES;
        
    }
}

//設定是不是可以移動列表
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
               {
    return YES;
}

//列表交換
-(void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    [list exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
}