2012年4月19日 星期四

根據內容多寡,調整cell高度

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}


cell.textLabel.text=[[theArray objectAtIndex:indexPath.row] objectForKey:@"description"];
cell.textLabel.lineBreakMode=UILineBreakModeTailTruncation; //若內容超出cell可容納範圍,最後出現"..."
cell.textLabel.numberOfLines=30; //單一cell出現的行數,0為無限

return cell;
}



- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
NSString *text = [[theArray objectAtIndex:indexPath.row] objectForKey:@"description"];

//開始去計算全部內容,以字體大小14、lineBreakMode:UILineBreakModeTailTruncation狀態下,會得到多少的範圍寬高度
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeTailTruncation];
//CGSizeMake(240.0, 480.0) 設定單一cell最大的寬高度,若得到的size超過這個範圍,則只會以這個為基準;

return MAX(size.height + 10, 40.0f); //單一cell高度最小會為40

}



UIViewContentModeScaleAspectFill後將多餘區域切除

UIImage *image = [UIImage imageNamed:@"image.jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 180, 300, 150)];
imageView.image = image;
imageView.contentMode = UIViewContentModeScaleAspectFill;
[self.view addSubview:imageView];


若該imgae的高度大於150
雖然使用了UIViewContentModeScaleAspectFill
仍會顯示完整的圖片
若要只限定出現150高度範圍內的圖片
需多加一段語法即可實現
imageView.clipsToBounds = YES;

若是使用xib將Mode設為Scale To Fill時
請勾選Clip Subviews即可有相同效果


轉載整理自:難纏的兔子王 - UIViewContentModeScaleAspectFill的陷阱


2012年4月9日 星期一

plist讀取

- (void)viewDidLoad

{

[superviewDidLoad];

NSString *path = [[NSBundlemainBundle] pathForResource:@"locations"ofType:@"plist"]; //plist檔案名稱、附檔名

NSData *plistData = [NSData dataWithContentsOfFile:path];

NSString *error; NSPropertyListFormat format;

NSArray *allspots = [NSPropertyListSerializationpropertyListFromData:plistData

mutabilityOption:kCFPropertyListMutableContainersAndLeaves

format:&format

errorDescription:&error];

NSString *documentsPath = [[allspots objectAtIndex:0] objectForKey:@"stitle"]; //先取第一個item, 在找key名稱為"stitle"

NSLog(@"Get: %@", documentsPath); //秀出該筆item的stitle的值

}




[轉載] NSString 常用轉換&格式化

關於 NSString 的二三事
http://furnacedigital..com/2011/04/nsstring.html



[轉載] Objective C 字串連接 & 型別轉換

/*字串連接*/
在java裡面我們常常用到"+"來連接兩個字串 但在objective c似乎不是這樣用
以下用一個例子解釋
float weight=benefit2/7700;
//將float轉成string
NSString* Text = [[NSString alloc] initWithFormat:@"%f", weight];
NSString* Text1=@"你會瘦";
NSString* Text2=@"kg";
//將三個字串連結在一起
NSString *ConText = [NSString stringWithFormat:@"%@%@%@", Text1,Text, Text2];

/*型別轉換*/
// 將字串轉換成int
NSString *intString = @"1";
int value = [intString intValue];
// 將字串轉換成float
NSString *floatString = @"10.00";
float value = [floatString floatValue];
// 將字串轉換成double
NSString *doubleString = @"10.000000";
double value = [doubleString doubleValue];
//將float轉換成字串float weight=benefit2/7700;
NSString* Text = [[NSString alloc] initWithFormat:@"%f", weight];
//釋放記憶體[Text release];
//將int轉換成字串
int weight=5;
NSString* Text = [[NSString alloc] initWithFormat:@"%d", weight];
//釋放記憶體
[Text release];

/*綜合範例*/ 
-(IBAction)buttonA:(UIButton *)text;{
    NSString *bb = @"You Pressed ";
    aa = @"You Pressed ";
    switch (text.tag) {
        case 1:
            //alert: You Pressed News Feed
            aa = [NSString stringWithFormat:@"%@News Feed",bb];
            break;
        case 2:
            //較有效率 alert: You Pressed Profile
            aa = [aastringByAppendingString:@"Profile"];
            break;
        case 3:
            //alert: You Pressed You Pressed Friends
            aa = [aa stringByAppendingFormat:@"%@Friends",bb];
            break;
        default:
            //int轉字串
            aa = [@"not yet"stringByAppendingString:[[NSStringalloc] initWithFormat:@"(%d)", text.tag]];
            break;
    }
    
    NSLog(@"你按了:%d - %@", text.tag, aa);
    
    //AlertView 提示功能
    UIAlertView * alertA = [[UIAlertViewalloc]initWithTitle:@"News Feed"message:aa
                                                    delegate:self cancelButtonTitle:@"OK"
                                           otherButtonTitles: nil];
    //多加一個按鈕
    [alertA addButtonWithTitle:@"Cancelled"];
    [alertA show];
    //[alertA release];
}



來源:
程式開發與生活玩樂的隨手筆記
http://kkwinds.blogspot.com/2010/04/iphone_19.html
http://kkwinds.blogspot.com/2010/04/iphone.html 
IPHONE SDK DEVELOP & PROGRAMMING TIPS
http://www.flyblog.info/catprogramming/73.html






[轉載] 幾個有關@property的屬性說明

@property是一個屬性訪問聲明,擴號內支持以下幾個屬性:

1、getter=getterName,setter=setterName,設置setter與getter的方法名2,readwrite、readonly,設置可供訪問級別

2、assign、setter方法​​直接賦值,不進行任何retain操作,為了解決原類型與環循引用問題

3、retain、setter方法​​對參數進行release舊值再retain新值,所有實現都是這個順序(CC上有相關資料)

4、copy、setter方法​​進行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。

5、nonatomic,非原子性訪問,不加同步,多線程並發訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務訪問。鎖被加到所屬對象實例級


轉自 CocoaChina 開發討論區