[[Programming]]
iPhone SDK メモ
スタンフォード大で [[iPhone 開発講座とコード:http://www.appbank.net/2008/10/30/iphone-news/1100.php]]が公開されていたらしいが,今は削除されている.
結局,&htmlinsert(amazontext,asin=4797352418,text=iPhone デベロッパーズ クックブック);が一番参考になる.眺めるのではなく,読むべし.
#contents
* UITableVie のフォントの変更 2009 04 08 [#h2fc71a0]
UIFont *font = [UIFont fontWithName:@"HiraKakuProN-W3" size:12.0];
cell.font = font;
ちなみに iPhone に入っているフォントは
American Typewriter
* AmericanTypewriter
* AmericanTypewriter-Bold
AppleGothic
* AppleGothic
Arial
* ArialMT
* Arial-BoldMT
* Arial-ItalicMT
* Arial-BoldItalicMT
Arial Rounded MT Bold
* ArialRoundedMTBold
Arial Unicode MS
* ArialUnicodeMS
Courier
* Courier
* Courier-Bold
* Courier-Oblique
* Courier-BoldOblique
Courier New
* CourierNewPSMT
* CourierNewPS-BoldMT
* CourierNewPS-ItalicMT
* CourierNewPS-BoldItalicMT
DB LCD Temp
* DBLCDTEmpBlack
Georgia
* Georgia
* Georgia-Bold
* Georgia-Italic
* Georgia-BoldItalic
Helvetica
* Helvetica
* Helvetica-Bold
* Helvetica-Oblique
* Helvetica-BoldOblique
Helvetica Neue
* HelveticaNeue
* HelveticaNeue-Bold
Hiragino Kaku Gothic ProN W3
* HiraKakuProN-W3
Hiragino Kaku Gothic ProN W6
* HiraKakuProN-W6
Marker Felt
* MarkerFelt-Thin
STHeiti J
* STHeitiJ-Light
* STHeitiJ-Medium
STHeiti K
* STHeitiK-Light
* STHeitiK-Medium
STHeiti SC
* STHeitiSC-Light
* STHeitiSC-Medium
STHeiti TC
* STHeitiTC-Light
* STHeitiTC-Medium
Times New Roman
* TimesNewRomanPSMT
* TimesNewRomanPS-BoldMT
* TimesNewRomanPS-ItalicMT
* TimesNewRomanPS-BoldItalicMT
Trebuchet MS
* TrebuchetMS
* TrebuchetMS-Bold
* TrebuchetMS-Italic
* TrebuchetMS-BoldItalic
Verdana
* Verdana
* Verdana-Bold
* Verdana-Italic
* Verdana-BoldItalic
Zapfino
* Zapfino
UI ロックスクリーン用に
* LockClock-Light
電話のダイヤル用に
* PhonepadTwo
* テーブルのグループ化と配列 [#lc850e3e]
return [[ array objectAtIndex:section] count]
cex.text = [[ array objectAtIndex:indexPath.section]
objectAtIndex:indexPath.row]
return cell;
でいけるだろう。
[[こういう方法:http://icodeblog.com/2008/08/08/iphone-programming-tutorial-populating-uitableview-with-an-nsarray/]]も紹介されている.
* 文字列から改行記号を取る. [#m0c7d174]
[[componentsSeparatedByString:http://www.oomori.com/cocoafw/Foundation/NSString/componentsSeatedByString.html]]関数が指定されたトークンで文字列を区切って配列を返すので,とりあえずこうする.
string = [[string componentsSeparatedByString:@"\n"]
objectAtIndex:0];
ただし "\n" は Macintoshではoptions キーを押しながら円マークで入力
* intValueのエラー処理 [#h2020773]
失敗すると FALSE が返ってくる.
if([ @"" intValue] == TRUE)
下の
[[エラー処理:http://www.gnu-darwin.org/www001/ports-1.5a-CURRENT/deskutils/etoile-systemconfig/work/Etoile/Frameworks/OgreKit/Source/RegularExpression/OGRegularExpressionFormatter.m]] [#m7be4e64]
int syntaxType = [anObject intValue];
if (syntaxType == -1) {
// エラー。例外を発生させる。
[self release];
[NSException
raise:NSInvalidUnarchiveOperationException format:
@"fail to decode"];
}
で、うまくいくかと思いきや。いかぬことがある。
* UITableViewにチェックを入れる。 [#mbfab8fe]
[[さまざまな情報:http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/TableView_iPhone/ManageSelections/ManageSelections.html]]があって錯綜している。[[ここ:http://www.iphonedevsdk.com/forum/iphone-sdk-development/7391-uitableviewcell-repeat-every-12-rows.html]]にも長い議論があるが、とりあえずは[[ここにあるよう:http://idevkit.com/forums/general-sdk/245-table-view-selection-sign.html]]に使ってみる。
と思ったが,うまくいかないので,チェックしたセクションと行を配列に記憶させ,テーブルがクリックされるたびに [tableView reloadData] で初期化を行うことにした.reloadData 処理には,いろいろ問題もあるようであるが,今のところ,ちゃんと動いている.
>
Now i have another problem, when i select one and i scroll down. I see that some others are selected to.
A bit strange.
<
>
You must be using a reuseIdentifier. When you go to return a cell, make sure to set it's accessoryType to the one without the checkmark unless you know it should be checked.
<
- (NSIndexPath *)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SeismicXMLAppDelegate *appDelegate =
(SeismicXMLAppDelegate *)[[UIApplication sharedApplication]
delegate];
[appDelegate showEarthquakeInfo:
[(TableViewCell *)[tableView
cellForRowAtIndexPath:indexPath] quake]];
[[tableView cellForRowAtIndexPath: oldIndexPath]
setAccessoryType:UITableViewCellAccessoryNone];
[[tableView cellForRowAtIndexPath: indexPath]
setAccessoryType:UITableViewCellAccessoryCheckmark];
oldIndexPath = indexPath;
return nil;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
TableViewCell *cell = (TableViewCell *)[tableView
dequeueReusableCellWithIdentifier:MyIdentifier];
if(indexPath == oldIndexPath){
cell.accessoryType =
UITableViewCellAccessoryCheckmark;
}else{
cell.accessoryType = UITableViewCellAccessoryNone;
}
if (cell == nil) {
cell = [[[TableViewCell alloc]
initWithFrame:CGRectZero reuseIdentifier:MyIdentifier]
autorelease];
}
// Set up the cell.
SeismicXMLAppDelegate *appDelegate =
(SeismicXMLAppDelegate *)[[UIApplication sharedApplication]
delegate];
// If the RSS feed isn't accessible (which could happen if
the network isn't available), show an informative
// message in the first row of the table.
if ([appDelegate isDataSourceAvailable] == NO) {
cell = [[[UITableViewCell alloc] initWithFrame:
CGRectZero reuseIdentifier:@"DefaultTableViewCell"]
autorelease];
cell.text = NSLocalizedString(@"RSS Host Not Available",
@"RSS Host Not Available message");
cell.textColor = [UIColor colorWithWhite:0.5
alpha:0.5];
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
Earthquake *quakeForRow = [appDelegate
objectInListAtIndex:indexPath.row];
[cell setQuake:quakeForRow];
return cell;
}
- [[あるいは:http://gist.github.com/raw/68574/28fef56d2f1cc594429efa0d18783df686cb3ee0/SelectionListViewController.m]]
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *SelectionListCellIdentifier =
@"SelectionListCellIdentifier";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:SelectionListCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithFrame:CGRectZero
reuseIdentifier:SelectionListCellIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
NSUInteger oldRow = [lastIndexPath row];
cell.text = [list objectAtIndex:row];
cell.accessoryType = (row == oldRow && lastIndexPath !=
nil) ? UITableViewCellAccessoryCheckmark :
UITableViewCellAccessoryNone;
return cell;
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
int newRow = [indexPath row];
int oldRow = [lastIndexPath row];
if (newRow != oldRow) {
UITableViewCell *newCell = [tableView
cellForRowAtIndexPath:indexPath];
newCell.accessoryType =
UITableViewCellAccessoryCheckmark;
UITableViewCell *oldCell = [tableView
cellForRowAtIndexPath: lastIndexPath];
oldCell.accessoryType =
UITableViewCellAccessoryNone;
lastIndexPath = indexPath;
}
[tableView deselectRowAtIndexPath:indexPath
animated:YES];
}