0

私はUITabBarControllerベースのアプリを持っています。クラスを作成しました。masterVCを構成するすべてのViewControllerはのtabBarControllerサブクラスですmasterVC。UIImageView(のプロパティ)を設定したいのですが、masterVC一度設定すると、内の各ビューにその画像が表示されますtabBarController

各VCをインスタンス化する場合、イメージをプロパティとして渡すことができます(これは簡単です)。ただし、tabBarControllerViewController間でこれを行う方法はありません。

私がやろうとしていることの最も簡単な概念的な例は、tabBarController内の各ビューコントローラーでのこの例によるものです。より良い方法が必要です:

-(void)viewDidAppear:(BOOL)animated
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *data = [defaults objectForKey:kMainImageData];
    if (data) {
        self.mainImageView.image = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    }
}

-(void)viewWillDisappear:(BOOL)animated
{
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.mainImageView.image];
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:kMainImageData];
}
4

4 に答える 4

1

それぞれUIViewControllerがデータを要求できる適切なデータソースを作成します。いくつかの方法があります:

  • イメージをディスクに保存し、ヘルパークラスを使用してイメージを取得します。
  • シングルトンのプロパティとして画像を保存し、取得します。
于 2012-11-13T22:07:32.737 に答える
1

メソッドをオーバーロードできます

-(id) initWithCoder:(NSCoder*)aDecoder

このようなもので:

self = [super initWithCoder:aDecoder];
if ( self )
{
    static UIImage *reuseImage = nil;

    if ( reuseImage == nil )
    {
        //Init reuseImage with your image
    }

    myImageViewProperty.image = reuseImage;
...
return self;
于 2012-11-13T22:08:35.120 に答える
1

私があなたを正しく理解していれば、キー値を観察することで、スーパークラスでこれをすべて行うことができると思います。

masterVCヘッダーで、次のことを宣言します。

@property (strong) UIImage *sharedImage;

そして実装では:

@synthesize sharedImage;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self addObserver:self forKeyPath:@"sharedImage" options:NSKeyValueObservingOptionNew context:NULL];
    }
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"sharedImage"]) {
        self.mainImageView.image = self.sharedImage;
    }
}

- (void)dealloc {
    [self removeObserver:self forKeyPath:@"sharedImage"];
}

次に、sharedImageプロパティがいずれかのサブクラスに設定されるたびに、画像ビューはそれに応じてその内容を更新します。

于 2012-11-13T22:18:13.797 に答える
0

viewDidAppear投稿したメソッドをmasterVCクラスに移動するのが一番簡単だと思います。次に、そのサブクラスのViewControllerで次のmasterVCことができます。

viewDidAppear他に行う設定がない場合は、メソッドを削除します。メソッドは、にあるを呼び出しviewDidAppearますmasterVC

また

次のように変更viewDidAppearして呼び出しviewDidAppearmasterVC行い、他のすべての設定を行います。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // your other code...
}
于 2012-11-13T22:20:48.247 に答える