Фоновое изображение для MoreNavigationController - PullRequest
1 голос
/ 23 августа 2010

Я хотел бы разместить изображение за таблицей ViewView в моем UITabBarController moreNavigationController. Я попытался вставить подпредставление, как при первой настройке TabBar:

UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background3.png"]];
[self.tabBarController.moreNavigationController.topViewController.view insertSubview:imageView atIndex:0];

Но это помещает изображение поверх, предположительно, потому что tableView не существует в то время. Есть ли лучшее время, когда я могу назвать это, чтобы заставить его работать должным образом, или более легкий подход?

Ответы [ 3 ]

3 голосов
/ 24 августа 2010

С некоторой помощью на этот вопрос я разобрался, как это сделать.По сути, viewController в moreNavigationController представляет собой один TableView, поэтому добавление фонового изображения не будет работать.Мне нужно было создать новое представление, добавить фоновое изображение, а затем добавить представление moreNavigationController поверх этого.Я сделал это, переопределив viewDidLoad в подклассе UITabBarController, но я ожидаю, что это может быть сделано и в другом месте.

- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationController *moreController = self.moreNavigationController;

    if ([moreController.topViewController.view isKindOfClass:[UITableView class]]) {
        UIView* newView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,367)];

        UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background3.png"]];
        imageView.opaque = NO;
        imageView.alpha = 0.4;
        [newView addSubview:imageView];

        moreController.topViewController.view.backgroundColor = [UIColor clearColor];
        moreController.topViewController.view.frame = CGRectMake(0,0,320,367);
        [newView addSubview:moreController.topViewController.view];

        moreController.topViewController.view = newView;
    }
}

Возможно, вы могли бы быть умнее с размерами кадров и т. Д., Но это работает для меня.Надеюсь, это поможет кому-то еще.

1 голос
/ 18 января 2011

Теперь вы можете получить доступ к свойству backgroundView из подклассов UITableView.

    UIViewController *moreViewController = tabBarController.moreNavigationController.topViewController;

    img = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"BG_MORE+1.png"]];

//Got some crashs in initialization !! Need to check .
if ([moreViewController.view isKindOfClass:[UITableView class]]) {
    UITableView *moreTableView = (UITableView*)moreViewController.view;
    [moreTableView setBackgroundView:img];
}
0 голосов
/ 23 августа 2010

Помимо всей этой беспорядочной неразберихи здесь, вы можете использовать UIView's takeSubviewToFront: и sendSubviewToBack: для организации ваших подпредставлений.В принципе, это должно помочь, хотя, если у вас есть больше подпредставлений, вам нужно немного поиграться с этим:

[self.tabBarController.moreNavigationController.topViewController.view addSubview:imageView];
[self.tabBarController.moreNavigationController.topViewController.view pushSubviewToBack:imageView];
//or [self.tabBarController.moreNavigationController.topViewController.view bringSubviewToFront:tableView];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...