Создание общего вспомогательного файла UIToolbar и методов для Objective C

#objective-c #dry #helper #uitoolbar

#objective-c #dry #помощник #uitoolbar

Вопрос:

Я создал представление с помощью UIToolbar, которое отлично работает.

Эта панель инструментов будет отображаться прямо в приложении, и прямо сейчас я копирую / вставляю код во множество разных файлов.

Я не хочу повторяться и хочу создать вспомогательный файл, который будет включать настройку панели инструментов и методы, связанные с панелью инструментов, в каждом файле, который мне нужен.

Я попытался поместить следующий код в файл .h .m и наследовать от UIView, но есть проблема, потому что есть ссылка на self.navigiationItem

Есть ли способ, которым я могу создать общий файл Objective C, который будет содержать весь код и методы, которые я хочу использовать?

Спасибо.

 - (void)viewDidLoad
   // ... 

    // appears in viewDidLoad
     // ---- TOOLBAR -----------//

        UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 100.0, 44.01f)];
        //[toolbar setBackgroundColor:[UIColor blackColor]];
        //[toolbar setTintColor:[UIColor redColor]];
        //[toolbar.layer setBorderColor:[[UIColor redColor] CGColor]];

        // Bar buttons

        UIBarButtonItem *barReloadBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(btnReload:)];

        [barReloadBtn setStyle:UIBarButtonItemStyleBordered];

        // Profile bar button
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"111-user" ofType:@"png"]];

        UIBarButtonItem *barProfileBtn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:self action:@selector(btnProfile:)];


        // Button array

        NSMutableArray *buttons = [[NSMutableArray alloc] init]; 

        [buttons addObject:barProfileBtn];
        [buttons addObject:barReloadBtn];


        [toolbar setItems:buttons];

        // Set nav items

        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolbar];

        // memory cleanup
        [image release];
        [buttons release];
        [barReloadBtn release];
        [barProfileBtn release];    
        [toolbar release];


        // ---- /TOOLBAR -----------//
    }



    #pragma mark - IBActions

    -(IBAction) btnProfile:(id)sender
    {
        UserProfileVC *userProfileVC = [[UserProfileVC alloc] initWithNibName:@"UserProfileVC" bundle:[NSBundle mainBundle]];

        UINavigationController *tmpNavCon = [[UINavigationController alloc] initWithRootViewController:userProfileVC];

        [self.navigationController presentModalViewController:tmpNavCon animated:YES];

        [tmpNavCon release];
        [userProfileVC release];
    }

    -(IBAction) btnReload:(id)sender
    {
        NSLog(@"Not done yet");
    }
  

Ответ №1:

navigationItem является свойством UIViewController , а не UIView . Если у вас есть такая общая функциональность, я бы наследовал UIViewController , добавил вашу пользовательскую логику viewDidLoad (или где это уместно), а затем унаследовал ваши контроллеры представления из этого класса. Просто убедитесь, что вы вызываете [super viewDidLoad] из реализаций ваших подклассов . viewDidLoad

Комментарии:

1. Ах, я попробую это, чтобы посмотреть, решит ли это проблему. Я уверен, что так и будет. Смогу ли я по-прежнему перемещать IBActions в эти новые вспомогательные файлы? Спасибо.