スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]UITableViewを実装するには

この記事ではUITableViewを実装します。
ただ実装するのではなく、とりあえず表示してそれなりに動くとこまでやります。
まずはview-basedでプロジェクトを作成して、以下のように実装していってください。
//ヘッダファイル.h
@interface SampleTableViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>{
}
@end

//メソッドファイル.m
-(void)viewDidLoad{
CGRect tmp_rect = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
UITableView *tableview = [[UITableView alloc] initWithFrame:tmp_rect
style:UITableViewStylePlain];
MedicalDataScroll_TableView.delegate = self;
MedicalDataScroll_TableView.dataSource = self;
[self.view addSubview:tableview];
}
//テーブルにセットするcellの数を設定する、今回は3つ。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 3;
}
//セルを設定する、numberOfRowsInSectionでreturnした数だけ通る。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
CGRect tmp_rect = CGRectMake(0, 0, tableView.frame.size.width, 50);
UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:tmp_rect
reuseIdentifier:CellIdentifier];
cell.textLabel.text = @"Sample";
return cell;
}
//セルを押した時に通る、deselectRowAtIndexPathはセルの選択状態を解除する。(必須)
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

UITableViewを作成して、iPadの設定画面のような設定画面を作ろうと思っています。
ある程度、画面の構成はできたのですが、作成した設定画面で設定内容を変更してメニュー画面に戻ったりして、再度設定画面にいくと、設定した内容が元に戻ってしまっている状態です。
メニューに戻る前の設定内容を表示したいのですが、どうしたらよろしいでしょうか?

続けての投稿すみません。
UITableViewのセルにUITextFieldを作成し、そのTextFiledに入力したい場合、ソフトウェアキーボードを非表示にし、そのかわり自分で作成したPopoverを表示させてそれで入力するようにしたいと考えています。
しかし、セルをクリックした際にPopoverを表示させる方法がわかりません。
どのようしたら、セルをクリックしたらPopoverを表示させTextFiledに入力できるのでしょうか?

Re: タイトルなし

> UITableViewを作成して、iPadの設定画面のような設定画面を作ろうと思っています。
> ある程度、画面の構成はできたのですが、作成した設定画面で設定内容を変更してメニュー画面に戻ったりして、再度設定画面にいくと、設定した内容が元に戻ってしまっている状態です。
> メニューに戻る前の設定内容を表示したいのですが、どうしたらよろしいでしょうか?

前画面に戻って情報が消えているのは画面を遷移した時にその画面が解放されているからです。
この場合は情報を一度保存しておいて、再び画面に戻った時にその情報を設定することになります。

情報をデバイスに保存する方法は2つです。
・NSUserDefaultsを利用する
・CoreDataを利用する
この場合は前者が適切でしょう。(後者は複雑なデータ管理に利用します)
使い方は下記URLです。
http://iphone-tora.sakura.ne.jp/nsuserdefaults.html

Re: タイトルなし

> 続けての投稿すみません。
> UITableViewのセルにUITextFieldを作成し、そのTextFiledに入力したい場合、ソフトウェアキーボードを非表示にし、そのかわり自分で作成したPopoverを表示させてそれで入力するようにしたいと考えています。
> しかし、セルをクリックした際にPopoverを表示させる方法がわかりません。
> どのようしたら、セルをクリックしたらPopoverを表示させTextFiledに入力できるのでしょうか?

セルを選択した場合のイベントかUITextFieldを選択した際のイベントかが定かではありませんが、とりあえずどちらかの選択時のイベントでUIPopoverViewControllerを生成して、

UIPopoverController *pop =[UIPopoverController alloc]initWithContentViewController:tableviewcontroller];

[pop presentPopoverFromRect: tableviewcell.frame
inView:tableviewcell
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
とします。(コードが正しいかはうろ覚えなので定かではありません)

後は
– popoverControllerShouldDismissPopover:
– popoverControllerDidDismissPopover:
のどちらかを呼ばれるようにデリゲートを設定します。
この中で閉じる前にUITextFieldへ値を代入するよう作ればよいのではないでしょうか。

後者の質問の件ですが、
UITableViewの中にUITextFieldをコードで生成していますが、
そのTextFieldを
-(void)viewDidLoad
で、デリゲートしたいのですが、どうしたらいいのかわかりません。
.hでIBOutlet UITextField* textFiled で生成した際は、-(void)viewDidLoadの中で
textField.delegate = self;
で、デリゲートできているのですが、
UITableViewの中に生成したUITextFieldの場合はどうしたらいいでしょうか?

Re: タイトルなし

> 後者の質問の件ですが、
> UITableViewの中にUITextFieldをコードで生成していますが、
> そのTextFieldを
> -(void)viewDidLoad
> で、デリゲートしたいのですが、どうしたらいいのかわかりません。
> .hでIBOutlet UITextField* textFiled で生成した際は、-(void)viewDidLoadの中で
> textField.delegate = self;
> で、デリゲートできているのですが、
> UITableViewの中に生成したUITextFieldの場合はどうしたらいいでしょうか?

UITextFieldの生成時点でデリゲートを通してやればいいだけです。
なのでやり方は仰っているように、
textField.delegate = self;
と同じ方法になると思います。

Popoverを表示することができました。
が、どこのTextFiledをクリックしても、全て上の方の同じ位置にPopoverが表示されてしまいます。

クリックされたTextFieldの下に表示をさせたいのですが、なぜ同じ位置に表示されてしまうのでしょうか?

Re: タイトルなし

> Popoverを表示することができました。
> が、どこのTextFiledをクリックしても、全て上の方の同じ位置にPopoverが表示されてしまいます。
>
> クリックされたTextFieldの下に表示をさせたいのですが、なぜ同じ位置に表示されてしまうのでしょうか?

presentPopoverFromRect:inView:permittedArrowDirections:animated:
の利用法を間違えているからだと思います。
しっかり理解して使うようにしてください。

第一引数はpopoverを表示する位置を決めます。
この座標を変えることで目標の位置を定めます。

第二引数はpopoverの親になるビューを指定します。
ココで指定したビューの第一引数で指定した座標に貼りつきます。

第三引数はアローの方向を定めます。
アローは吹き出しの指し示す部分をそう呼びます。

第四引数はアニメーションの有無を指定します。

間違えている可能性があるので調べてみてください。

第一引数か、第二引数になにか問題があると思われます。
正しい指定を行ってください。

引数の考え方をよく理解していませんでした。
丁寧な解説ありがとうございます。
解決することができました!

UITableViewに生成したUITextFiledをクリックすると、ソフトウェアキーボードが表示さsれまうが、TableViewの下の方にあるCellに入力したい場合、ソフトウェアキーボードで隠れてしまいます。
入力したいCellを見える範囲まで移動させる方法はありますか?

Re: タイトルなし

> UITableViewに生成したUITextFiledをクリックすると、ソフトウェアキーボードが表示さsれまうが、TableViewの下の方にあるCellに入力したい場合、ソフトウェアキーボードで隠れてしまいます。
> 入力したいCellを見える範囲まで移動させる方法はありますか?

前にキーボードが隠れないようにする方法と、キーボードを表示させない方法をどちらも実装したのですが、どうやら忙しさにかまけて記事にするのを忘れていたようです。
検索すれば出てきますのでわからなければ検索を検討してみてください。

前者は画面全体に表示されているビューをスクロールビューの上に乗っける処理を作成する方法です。
後者は-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField に対して、適切な処理を記述した後にreturn NO;とする方法です。
Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。