質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

2回答

3083閲覧

iOSでサイドメニューの実装

toolonride

総合スコア13

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2015/06/26 14:44

iOSアプリに横から出てくるメニューを実装しようとしています。

検索してみた所、どうもフェイブックの様なメニューが出てくると
メイン画面もそれに合わせてスライドするというものが多いのですが
メイン画面に被せて表示されるメニューを考えています。

イメージはコチラです。
https://github.com/romaonthego/REFrostedViewController
このサンプルが非常に良かったのですが
実装してみると小枠のメニュー数が固定しか無理なようでした。

具体的には

大メニュー
小メニュー
小メニュー
大メニュー
小メニュー
小メニュー

上記はいけますが

大メニュー
小メニュー
大メニュー
小メニュー
小メニュー

の様に小メニューが不規則なパターンには対応していませんでした。
試しに文字列を表示する部分を
@"",
としてみたり、そもそも記入しなかったりしてみましたが
どうも旨くいきません。
プログラムスキルも、今Objective-Cの参考書を探している
プログラム歴1週間程度です。

このサンプルを修正する方法がありましたらと思い
投稿させて頂きました。

また検索にて
「iOS サイドメニュー」
「storyboard スライドメニュー」
「side menu -facebook」
「no slidein submenu」
等々で検索していますが
この他のメインに被せるタイプのサンプルが
全然見つからない(同じ作者の別サンプルと、テラテイルに投稿されていた物くらい)のですが
ワードが悪いのでしょうか?それとも、あまり需要がないのでしょうか?
重ねての質問になりますが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

REFrostedViewControllerは、メニューについて何の制約もありません。
通常のViewControllerと同様に、好きなようにデザインしてください。

投稿2015/06/28 04:14

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toolonride

2015/06/29 05:24

回答ありがとうございます。 通常のViewControllerと同様と書かれていたので 早速 https://github.com/tamotamago/KTSlideMenuController にあるKTViewControllerのソースを、REFrostedViewControllerの DEMOMenuViewControllerに貼り付けて ストリーボードもそっくりそのまま貼り付けてみました。 しかし起動してみると NSLog(@"%ld, %ld", indexPath.section, indexPath.row); の部分が出力されなくなりました。 部分部分の理解が出来ていない為 2つのソースを強制的に貼り付けたのがそもそもの間違いだと認識していますが どこが原因なのでしょうか?
Stripe

2015/06/29 10:52

KTViewControllerじゃなくて、KTViewControllerの中のmenuViewControllerを利用しなければならないのでは?
toolonride

2015/06/29 15:11

再びの回答ありがとうございます。 教えて頂きましたmenuViewControllerですが KTViewController.h KTViewController.m 並びにMainStoryboard.storyboard で検索してみても見付けられませんでした。 大元の KTViewControllerを削れるだけ削ってみましたが この中の◯◯View◯◯という部分を利用するという意味でしょうか? - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //menu table view UITableViewController *menuTableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"KTMenuTalbeViewController"]; menuTableViewController.tableView.delegate = self; [menuTableViewController.view setFrame:_dummyView.frame]; [self addChildViewController:menuTableViewController]; [menuTableViewController didMoveToParentViewController:self]; [self.view addSubview:menuTableViewController.view]; //navigationController UINavigationController *navigationController = [[UINavigationController alloc] init]; [self addChildViewController:navigationController]; [navigationController didMoveToParentViewController:self]; [self.view addSubview:navigationController.view]; UIViewController *viewController1 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"]; [self setFirstViewController:viewController1]; } #pragma mark - setFirstViewController -(void)setFirstViewController:(UIViewController *)viewController { UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"menu" style:UIBarButtonItemStylePlain target:self action:@selector(slide:)]; [viewController.navigationItem setLeftBarButtonItem:leftBarButtonItem]; UINavigationController *navigationController = [self.childViewControllers lastObject]; [navigationController setViewControllers:[NSArray arrayWithObjects:viewController, nil]]; } #pragma mark - UITableViewControllerDelegate -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"%d, %d", indexPath.section, indexPath.row); } #pragma mark - slide -(void)slide:(id)sender { _isOpen = !_isOpen; UINavigationController *firstNavigationController = [self.childViewControllers objectAtIndex:1]; UIView *firstView = firstNavigationController.view; [UIView animateWithDuration:0.3 animations:^{ CGFloat originX = _isOpen ? 200 : 0; CGRect frame = firstView.frame; frame.origin.x = originX; firstView.frame = frame; } completion:^(BOOL finished){ }]; } @end
Stripe

2015/06/29 16:30

menuTableViewControllerです。ちょっとスペルを間違えました。
toolonride

2015/07/01 12:57

コメントありがとうございます。 menuTableViewControllerを利用するという事なので DEMOMenuViewControllerを元に戻し menuTableViewControllerが書かれている所を下記の様にしてみました。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //menu table view UITableViewController *menuTableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"KTMenuTalbeViewController"]; menuTableViewController.tableView.delegate = self; [menuTableViewController.view setFrame:_dummyView.frame]; [self addChildViewController:menuTableViewController]; [menuTableViewController didMoveToParentViewController:self]; [self.view addSubview:menuTableViewController.view]; //navigationController UINavigationController *navigationController = [[UINavigationController alloc] init]; [self addChildViewController:navigationController]; [navigationController didMoveToParentViewController:self]; [self.view addSubview:navigationController.view]; UIViewController *viewController1 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"]; [self setFirstViewController:viewController1]; } さらにsetFirstViewControllerがないと言われたので KTViewControllerから #pragma mark - setFirstViewController -(void)setFirstViewController:(UIViewController *)viewController { UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"menu" style:UIBarButtonItemStylePlain target:self action:@selector(slide:)]; [viewController.navigationItem setLeftBarButtonItem:leftBarButtonItem]; UINavigationController *navigationController = [self.childViewControllers lastObject]; [navigationController setViewControllers:[NSArray arrayWithObjects:viewController, nil]]; } の所を抜き出してDEMOMenuViewControllerへ追記すると共に @property (nonatomic, retain) IBOutlet UIView *dummyView; @synthesize dummyView = _dummyView; の追記、並びに KTSlideMenuControllerのストーリーボードから 灰色の画面があるView Controllerと その下画面に描かれているTable View Controllerを REFrostedViewControllerのストーリーボードへと移植してみましたが 起動すらままらなくなりました。 ネットを彷徨っていた所 作者のサイト http://tamotamago.com/?p=405 を見つけ Stripeさんにご指摘頂いた 「menuTableViewControllerを利用しなければならないのでは?」 というのは作者の所でいう 「また TableViewController で起きたイベントを、それをのせている ViewController で受け取りたいので、menuTableViewController.tableView.delegate = self; をしてます。 そして、最後に ViewController の childViewController として TableViewController をセットし、その View を載せます。あとはこの ViewController で View の切り替えや、スライドをコントロールすれば完了です。」 という部分なのだと思いますが上記の様に書き換えても 赤いエラーがないのにも関わらず起動できません。 Objective-Cの絵本を読み終えたばかりで ソースの切り張りは無理があるとわかってはいますが どうか、よろしくお願い致します。
Stripe

2015/07/01 15:58

えーと、今は、REFrostedViewControllerについての話をしていたはずです。KTViewControllerの話ではありません。目的を見失わ無いでください。
toolonride

2015/07/04 07:15

あれからUiKit徹底解説iOSユーザーインターフェイスなる本も読んでみましたがさっぱりわからないので、具体的なコードをお願いできませんでしょうか? 厚かましいお願いかもしれませんが、よろしくお願いします。
Stripe

2015/07/04 08:28

とりあえず、UIViewControllerの使い方を勉強してください。ソースコードだけ見ても理解できないと思います。
guest

0

解決出来てはいませんが、今の私のスキルでは解決出来そうにもないので
一旦、閉めさせて頂きます。

ありがとうございました。

投稿2015/07/05 08:25

toolonride

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問