0

Rubymotionアプリを書いていますが、TabBarをカスタマイズしたいと思います。NSScreencasts.comで、Objective-Cでそれを行う方法を説明していますが、以下のコードをRubyに変換するにはどうすればよいですか?

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self customize];        
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self customize];
    }
    return self;
}

- (void)customize {
    UIImage *tabbarBg = [UIImage imageNamed:@"tabbar-background.png"];
    UIImage *tabBarSelected = [UIImage imageNamed:@"tabbar-background-pressed.png"];
    [self setBackgroundImage:tabbarBg];
    [self setSelectionIndicatorImage:tabBarSelected];
}

@end

これは私の試みです:

class CustomTabbar < UITabBarController
  def init
    super
    customize
    self
  end

  def customize
    tabbarBg = UIImage.imageNamed('tabbar.jpeg')
    self.setBackgroundImage = tabbarBg
  end
end

しかし、それを実行すると、次のエラーが発生します。

Terminating app due to uncaught exception 'NoMethodError', reason: 'custom_tabbar.rb:5:in `init': undefined method `setBackgroundImage=' for #<CustomTabbar:0x8e31a70> (NoMethodError)

アップデート

*これは私のapp_deleteファイルです:*

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    first_controller = FirstController.alloc.init
    second_controller = SecondController.alloc.init

    tabbar_controller = CustomTabbar.alloc.init
    tabbar_controller.viewControllers = [first_controller, second_controller]

    @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
    @window.rootViewController = tabbar_controller
    @window.makeKeyAndVisible
    true
  end
end
4

1 に答える 1

1

私たちが行った「チャット」によると、ビューとコントローラーの適切な階層について非常に混乱しているようです。コントローラはビ​​ューを所有するオブジェクトですが、コントローラには視覚的なプロパティはありません。ビューには視覚的なもの(背景画像など)があります。たとえば、タブバーがある場合、実際には次のようになります。1)TabBarController 2)TabBar(ビュー)。

これで、TabBarはビューになり、「backgroundImage」というプロパティがあり、これを使用して背景を変更できます。当然のことながら、TabBarControllerにはそのようなものはありませんが、「内部」コントローラーのリストがあります。

あなたが望むことをするいくつかのコードをお見せしましょう。それはObj-Cにありますが、Rubyに書き直すのは簡単なはずです。AppDelegateのdidFinishLaunchingWithOptionsメソッドにこれがあります。

UITabBarController *tbc = [[UITabBarController alloc] init];

UIViewController *v1 = [[UIViewController alloc] init];
UIViewController *v2 = [[UIViewController alloc] init];

tbc.viewControllers = @[v1, v2];
tbc.tabBar.backgroundImage = [UIImage imageNamed:@"a.png"];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = tbc;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;

TabBarControllerにはプロパティ「viewControllers」があることに注意してください。これは内部コントローラーのリストです。また、ビューUITabBarへの参照であるプロパティ「tabBar」もあります。アクセスして背景画像を設定します。

于 2012-11-16T12:42:52.927 に答える