LoginSignup
12
12

More than 5 years have passed since last update.

Master-Detail ApplicationでStoryboardを使い起動後の画面を独自のビューに変更する

Last updated at Posted at 2012-02-10

何回かやっているのにそのたびに完全に忘れきっているのでメモとして残しておく必要を感じた


GUIでの作業

  • ビューの追加

    1. ファイルツリーを右クリックしてNewFile、CocoaTouchからUIViewController subclassを追加、適切な名前をつける
    2. Storyboardのファイルを開き、Objects一覧からオレンジの球体のViewControllerをD&Dで追加する
    3. ViewControllerを選択し、Identity Inspectorで自分が作ったViewControllerの名前を指定する
  • セグエの変更

    1. NavigationControllerからMasterViewControllerへと延びるRelationship segueを消す
    2. NavigationControllerから自分が作ったViewControllerにRelationship segueを接続する
    3. 自分が作ったViewControllerにボタン等を追加し、それをMasterViewControllerへ接続する
  • セグエの接続は二本指ドラッグもしくはctrl+ドラッグし接続先でドロップすることで接続できる


コードの変更

  • managedObjectContextの取得方法を変更
    1. AppDelegate.mのなかで初期化時にmanagedObjectContextをMasterViewControllerに渡すようなコードを書いてあるのを消す
    2. MasterViewControllerのmanagedObjectContextプロパティを@dynamicに変更し、AppDelegateインスタンスのmanagedObjectContextを取得するようなコードに変更する
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    //UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    //MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    //controller.managedObjectContext = self.managedObjectContext;
    //MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    return YES;
}
MasterViewController.h
@property (nonatomic, readonly) NSManagedObjectContext * managedObjectContext;
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
MasterViewController.m
#import "AppDelegate.h"
@implementation MasterViewController

@dynamic managedObjectContext;
@synthesize fetchedResultsController=__fetchedResultsController;
- (NSManagedObjectContext *)managedObjectContext {
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    return appDelegate.managedObjectContext;
}
  • editボタンをなくす
    1. MasterViewControllerの初期化時に左側のボタンを戻るボタンからEditボタンに変更するようなコードが書いてあるのを消す
MasterViewController.m
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // Set up the edit and add buttons.
    // self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject)];
    self.navigationItem.rightBarButtonItem = addButton;
}

before
before

after
after

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12