isHeddenの注意点

TebleViewの上にViewがあって、そのViewがisHedden = trueにもかかわらず、
cellタップが効かない!と思ったら、
Autorayout でUserInteractionEnabled のチェックを外す。

複数のストーリーボード

複数のストーリーボードを使って、NavigationControllerで画面遷移する場合

①ストーリーボードを追加する(今回、ファイル名はStoryboard.storyboard)

②identity inspectorで、対応するViewControllerとStoryboard ID を設定する。

f:id:ichi6161:20180107000615p:plain

③コードを追加

//定数にストーリーボードのファイル名を指定
let storyboard: UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil)

//ここで、ストーリーボードとViewControllerを結びつけ
let next = storyboard.instantiateViewController(withIdentifier:"Storyboard") as?ToDoViewController
  
//画面遷移
self.navigationController?.pushViewController(next!, animated: true)

以上

Navigation Controller関係

ナビゲーションバーにボタンをつけたいとき

Bar Button Itemを選択して、Itemを置きたい場所にドロップすればいいだけ。「Bar Button Item」を選択することに注意

複数のストーリーボードでナビゲーションバーを使うとき

それぞれのストーリーボードでナビゲーションコントローラーを挿入する。

delegateの実装

Modelクラス ViewControllerクラス

Modelクラスでデータベースに値を入れたことをViewControllerに伝える。

プロトコルの宣言 ② delegateプロパティを宣言。アクセッサ (weak, nonatomic)

FolderManager.h

#import <Foundation/Foundation.h>
#import "Folder.h"

@protocol ManagingFolderDelegate <NSObject> // ①

-(void)didFinishTransactFolder;

@end

@interface FolderManager : NSObject
@property (weak, nonatomic) id<ManagingFolderDelegate>  delegate;  // ②

 // 以下省略

③ ManagingFolderDelegateに準拠する

FolderListViewController.m

@interface FolderListViewController ()<ManagingFolderDelegate>

④ delgateするクラスのプロパティを自身に割り当てる(viewDidLoadとか)

self.folderManager.delegate = self;

ControllerからDataSourceを切り離す

  1. データソースクラスのヘッダーにUIKitインポート
#import <UIKit/UIKit.h>
  1. データソースクラスのヘッダーにUITableViewDataSource準拠の宣言
@interface TableDataProvider : NSObject<UITableViewDataSource>
  1. ViewControllerクラスでデータソースクラスのインスタンスをプロパティで保持
@property(strong, nonatomic) TableDataProvider *dataSource;
  1. ViewControllerのviewDidLoadなどに以下を記載(ViewControllerのtableviewのデータソースにTableDataProviderのインスタンスを指定)
self.dataSource = [[TableDataProvider alloc]init];
self.tableView.dataSource = self.dataSource;

以上

defaultのストーリーボードを消去して新規でストーリーボード作成する場合

ビルドしてFolderListViewControllerから表示される

  1. info.plistの書き換え f:id:ichi6161:20170621235127p:plain

  2. ViewControllerにカーソルを合わせて、storyboardのClassを変更f:id:ichi6161:20170621235137p:plain

  3. is initial ViewContollerにチェックを入れる f:id:ichi6161:20170621235141p:plain

  4. xibファイルを使用する時のapp delegateに記載するコードはいらない(入れるとViewの上にあるオブジェクトが表示されない)

storyboardを使わない場合

1. プロジェクトを作った際に作られるdefaultのファイルを消去する

Main.storyboard, ViewController.h, ViewController.mwo
Move to Trashを選択する

2. info.plistを修正

“Main storyboard file base name”の欄が"main.storyboard"となっているので、"main.storyboard"を消すか、その列にカーソルを合わせてdeleteキーを押して削除する

3. コマンド+ Nキーで新しいファイルを作成

UIViewControllerクラスを継承したクラスを作る(xibファイルを使う場合はそれにcheckを入れる)

4. AppDelegate.m ファイルに先ほど作成したViewControllerクラスのヘッサーをimport

5. AppDelegate.mファイルにコードを追加

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

  // Override point for customization after application launch
  self.window.backgroundColor = [UIColor whiteColor];

  MainViewController *viewController = [[MainViewController alloc] init];

  self.window.rootViewController = viewController;
  
  [self.window makeKeyAndVisible];
 
  return YES;
}

参考:

medium.com