1

わかった。2つのviewControllerがあり、最初から2番目までモーダルセグエを実行する場合は、[self dismissModalViewControllerAnimated:YES]を使用してそれを閉じます。viewDidLoadをリコールしていないようです。メインページ(viewController)があり、次にある種のオプションページがあり、オプションを変更したときにメインページを更新したいと思います。これは、2つのモーダルセグエ(1つは前進、もう1つは後退)を実行したときに機能しましたが、構造化されていないように見え、大規模なプロジェクトではコードが乱雑になる可能性があります。

プッシュセグエのことを聞いたことがあります。彼らはもっと良いですか?

ありがとう。私はどんな助けにも感謝します:)。

4

1 に答える 1

10

これは、UIViewController が既にメモリに読み込まれているためです。ただし、viewDidAppear:を使用できます。

または、プッシュするビュー コントローラーをプッシュされたビュー コントローラーのデリゲートにし、プッシュされたコントローラーが画面を終了するときに更新を通知することもできます。

後者の方法には、 の本体全体を再実行する必要がないという利点がありviewDidAppear:ます。たとえば、テーブルの行のみを更新している場合、全体を再レンダリングする必要はありません。

編集:デリゲートを使用する簡単な例を次に示します。

#import <Foundation/Foundation.h>

// this would be in your ModalView Controller's .h
@class ModalView;

@protocol ModalViewDelegate

- (void)modalViewSaveButtonWasTapped:(ModalView *)modalView;

@end

@interface ModalView : NSObject

@property (nonatomic, retain) id delegate;

@end

// this is in your ModalView Controller's .m
@implementation ModalView

@synthesize delegate;

- (void)didTapSaveButton
{
    NSLog(@"Saving data, alerting delegate, maybe");

    if( self.delegate && [self.delegate respondsToSelector:@selector(modalViewSaveButtonWasTapped:)])
    {
        NSLog(@"Indeed alerting delegate");

        [self.delegate modalViewSaveButtonWasTapped:self];
    }
}

@end

// this would be your pushing View Controller's .h
@interface ViewController : NSObject <ModalViewDelegate>

- (void)prepareForSegue;

@end;

// this would be your pushing View Controller's .m
@implementation ViewController

- (void)prepareForSegue
{
    ModalView *v = [[ModalView alloc] init];

    // note we tell the pushed view that the pushing view is the delegate
    v.delegate = self;

    // push it

    // this would be called by the UI
    [v didTapSaveButton];
}

- (void)modalViewSaveButtonWasTapped:(ModalView *)modalView
{
    NSLog(@"In the delegate method");
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {

        ViewController *v = [[ViewController alloc] init];

        [v prepareForSegue];
    }
}

出力:

2012-08-30 10:55:42.061 Untitled[2239:707] Saving data, alerting delegate, maybe
2012-08-30 10:55:42.064 Untitled[2239:707] Indeed alerting delegate
2012-08-30 10:55:42.064 Untitled[2239:707] In the delegate method

例は、私がまったく関係のない OS X のCodeRunnerで実行されました。

于 2012-08-30T15:43:00.693 に答える