Передача наилучшей практики «родительского» ViewController - PullRequest
1 голос
/ 03 апреля 2012

Настройка:

PickerView (spinSelector) и метка (selectedItem) добавлены в ViewController. Созданы отдельные файлы классов делегатов (SpinDelegate m & h) для делегата PickerView. Создан экземпляр делегата (SpinDelegate * mySpinDelegate) Назначенное свойство делегата для экземпляра делегата

ViewController.h

@interface ViewController : UIViewController
{
    SpinDelegate *mySpinDelegate;
}

@property (nonatomic, weak) IBOutlet UILabel *chosenItem;
@property (nonatomic, strong) IBOutlet UIPickerView *spinSelector;

ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    mySpinDelegate=[[SpinDelegate alloc]init];

    self.spinSelector.delegate=mySpinDelegate;
    self.spinSelector.dataSource=mySpinDelegate;
}

SpinDelegate.h

@interface SpinDelegate : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
{
    ChoiceData *choiceItems;
}

@end

SpinDelegate.m

    #pragma mark - PickerView Delegate
    - (NSString *)pickerView:(UIPickerView *)pickerView 
titleForRow:(NSInteger)row 
forComponent:(NSInteger)component{

        return [choiceItems.choiceList objectAtIndex:row];
    }

Далее следует использовать метод:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;

Это часть протокола UIPickerViewDelegate. Используя это, просто измените UILabel (selectedItem) в ViewController на значение строки. Что-то вроде "Выбранный элемент% i", строка

Я прочитал и просмотрел тонну постов и вопросов по сообщениям от UIViewController до UIViewController и посмотрел протокол / делегат, singleton, NSNotificationCenter ... мне просто кажется, что есть синтаксис Мне не хватает адреса родителя / супер? ViewController создал экземпляр делегата, разве делегат не имеет области действия?

Пожалуйста, расскажите мне об этом. :)

1 Ответ

1 голос
/ 03 апреля 2012

Вы можете сделать что-то вроде этого:

ViewController.h

#import "SpinViewController.h"
@interface ViewController : UIViewController<SpinViewControllerDelegate>
{
}

@property (nonatomic, weak) IBOutlet UILabel *chosenItem;
@property (nonatomic, strong) IBOutlet UIPickerView *spinSelector;

ViewController.m

- (void)someFunction
{
    mySpinViewController=[[SpinViewController alloc]init];
    mySpinViewController.delegate=self;
    // show or present mySpinViewController
}

//implement the followed protocol's method
-(void) optionSelected:(NSString*)cellValue{

}

SpinViewController.h

@protocol SpinViewControllerDelegate <NSObject>

@optional
-(void) optionSelected:(NSString*)cellValue;
@end

@interface SpinViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
{
    ChoiceData *choiceItems;
}

@property (nonatomic,retain)id <SpinViewControllerDelegate> delegate;

@end

SpinViewController.m

-(void) pickerValueSelectedOrSimilarFn:(NSString*)cellValue{
  // this is how you give a callback to classes following the protocol
  [self.delegate optionSelected:cellValue];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...