4

Cocoa Touch を使用してシングル ビュー アプリケーションを作成しています。その 1 つのビューにさまざまなテーマを選択して表示するメニューが必要です。最適なアプローチとは何か、それを実現する方法を考えていました。

マスター/詳細ビューを作成する必要がありますか? もしそうなら、詳細ビューをアプリがロードする最初の画面にする方法を教えてください。しかし、これが最善のアプローチであるかどうかはわかりません。

私はまた、このポップオーバーメニューのようなものを見てきましたが、既製のソリューションを購入するだけでなく、この種のことを自分で達成する方法を学びたい. 同様の機能を提供する Cocoa Touch のクラスはありますか? Core Graphics を使用してこのメ​​ニューをゼロから作成したことは明らかですが、たとえば UIButton のグループを使用して、このタイプのメニューを実現する簡単な方法はありますか?

コード例は大歓迎ですが、私はこの問題に取り組むための最良の方法を本当に探しているので、どのフレームワークに慣れるべきかを知っています.

ティア

4

4 に答える 4

2

UICollectionViewwithを使用しUICollectionViewFlowLayoutて、さまざまなテーマを切り替えるために使用できるボタンのグリッドを作成してみてください。

選択メニューから何を求めているか、何個のテーマを持っているか、どのように表示したいかなどについて詳しく知らなければ、ある方法を別の方法よりも提案することは困難です。しかし、はグリッド配置で表示するために Apple によってUICollectionViewFlowLayout事前に定義されているため、この問題に取り組む良い方法になる可能性があります。UICollectionViewLayoutUIViews

UICollectionViewwithを実装する方法は次のUICollectioViewFlowLayoutとおりです。

ヘッダーファイル

@interface ViewController : UIViewController <UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> {
    UICollectionView * themeSelection;
}

実装ファイル

- (void)viewDidLoad {
    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    themeSelection =[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    [themeSelection setDataSource:self];
    [themeSelection setDelegate:self];

    [themeSelection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [self.view addSubview: themeSelection];

    [super viewDidLoad];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 15;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    //Each cell is a theme that could be selected

    return cell;
}     

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(100, 100);
}
于 2013-08-01T10:06:39.387 に答える
1

UINavigationController を使用して、UITableViewController をナビゲーション スタックのテーマのリストと共にプッシュするのはどうですか?

提供できるテーマの数に制限はなく、非常に簡単に行うことができます。

または、modalTransitionStyle を UIModalTransitionStyleFlipHorizo​​ntal に設定して [UIViewController presentViewController:animated:completion:] を使用することもできます。

于 2013-07-25T21:40:03.170 に答える
1

テーマの数が 6 以下の場合は、いくつかのボタンで UIActionSheet を使用できます。ビュー コントローラーで、次のようなコードを使用して、[テーマの選択] ボタンのタップを処理します。

UIActionSheet* as = [[UIActionSheet alloc] initWithTitle:@"Choose Theme" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Theme 1", @"Theme 2", @"Blue Theme", @"etc."];
[as showInView:[self view]];

.h ファイルの先頭で、クラス定義の横に次を追加します。

<UIActionSheetDelegate>

そして、.m ファイル内に次のようなメソッドを追加します。

-(void)actionSheet:(UIActionSheet*)as clickedButtonAtIndex:(NSInteger)index {
  switch(index) {
    case 0:
      //It was theme 1
      break;
    case 1:
      //It was Theme 2
      break;
    case 3:
      //It was blue theme
      break;
    //And so on...
  }
}

コメントを選択したテーマに切り替えて置き換えます。

注: 6 つ以上のテーマがある場合は、アクション シートの UIPickerViews に関するこのSO の質問で説明されているソリューションのようなものが必要になります。

于 2013-07-30T01:08:42.043 に答える
0

これには多くの方法があります。UIActionSheet に UITableView を追加し、特定のボタンに actionSheet を表示するなど。また、 UIPopOverViewController は、このタイプの作業を行うのに最適です。

以下は、あなたの場合に役立つ可能性のあるコードの有用なソースです。

https://github.com/nacho4d/Accordion

https://github.com/kyoshikawa/ZPopoverController

于 2013-07-31T08:23:51.790 に答える