objective-cでdelegateを使ってmodalのtextareaつくるよ
こんばんわ!
天一はこってりしか食べない人です。
最近会社でのポジションがウェッブエンジニアからiOSエンジニアになったのですが、
objective-cとxcodeの文化ってありますね!初めてpython触った時のインデントみたいな!(雑)
という訳でmodalで出てきたウィンドウからテキストを入力して、
modalを閉じたら元の画面に入力したテキストが表示されてるっていうのを作るコードが
意外と分かりやすいマニュアルとか参考が少なかったのでメモしておきます。
元の画面名がFirstViewController, modal画面名がModalControllerです。
●FirstViewController.h
#import <UIKit/UIKit.h> @interface FirstViewController : UIViewController { } @end
FirstViewController.hに関してはデフォルトのままで大丈夫です。
●FirstViewController.m
#import "FirstViewController.h" #import "ModalController.h" @interface FirstViewController () @property (weak, nonatomic) IBOutlet UILabel *viewLabel; @end @implementation FirstViewController - (void) viewDidLoad { [super viewDidLoad]; } - (void)sendOkome:(NSString*) str { self.viewLabel.text = str; [self dismissViewControllerAnimated:YES completion:nil]; } - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSString *genmaiText = self.viewLabel.text; ModalController *mCon = [segue destinationViewController]; mCon.mydelegate = self; mCon.genmai = genmaiText; } @end
viewLabel
はModalInputControllerで入力したテキストを表示する部分です。
ModalControllerに送りたい(ModalControllerインスタンスを使いたい)ので、初めにModalController.hをimportしておく必要があります。
prepareForSegue
methodでボタンが押された時にgenmaiとしてModalControllerにテキストを送ります。
●ModalController.h
#import <UIKit/UIKit.h> @protocol ModalControllerDelegate - (void)sendOkome:(NSString*)str; @end @interface ModalController : UIViewController <UITextViewDelegate> { } @property (nonatomic, weak) IBOutlet UITextView* textOkome; @property (weak, nonatomic) IBOutlet NSString *genmai; @property (nonatomic, retain) id mydelegate; @end
受け取るデータの変数やdelegateの設定を行います。
●ModalController.m
#import "ModalController.h" @interface ModalController () @end @implementation ModalController @synthesize textOkome, mydelegate, genmai; - (void)viewDidLoad { [super viewDidLoad]; textOkome.delegate = self; [textOkome becomeFirstResponder]; textOkome.text = genmai; } - (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)textGenmai { if ([textGenmai isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; } - (IBAction)pushBtn:(id)sender { if ([self.mydelegate respondsToSelector:@selector(sendOkome:)]) { [self.mydelegate sendOkome:textOkome.text]; } } @end
受け取った値をtextview内に表示し、textview内にあるテキストをdelegateで取得しています。
最後にFirstViewController.mのsendOkome
メソッドを呼び出してそこでmodalウィンドウを閉じています。
試行錯誤で出来たものなので美しくないですがつんだら試してみてください。
説明がまじで下手くそなので後日追加するかもしれません。