Установка методов делегирования в элементе управления дочерним видом

#iphone

#iPhone

Вопрос:

Я создаю приложение, которое должно позволять пользователю прокручивать изображения. Поскольку у меня есть много изображений (загруженных из Интернета), что я делаю, так это то, что у меня есть кнопки ВВЕРХ и вниз в родительском представлении, кроме того, у меня есть вид прокрутки. В зависимости от выбранной опции (вверх или вниз) я добавляю представление ImageClass (созданный класс, который расширяет UIViewController) к виду прокрутки.

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

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

Код:

 -(IBAction) down:(id) sender{

    [scrollView2 removeFromSuperview];

}

-(IBAction) down        :(id) sender {

    [scrollView2 removeFromSuperview];
    if(scrollView2 == nil)
        scrollView2 = [[UIScrollView alloc] init];
    [self.view addSubview:scrollView2];
    [self.view sendSubviewToBack:scrollView2];
    [scrollView2 setBackgroundColor:[UIColor blackColor]];
    [scrollView2 setCanCancelContentTouches:NO];
    scrollView2.clipsToBounds = YES;    
    // default is NO, we want to restrict drawing within our scrollview

    scrollView2.indicatorStyle = UIScrollViewIndicatorStyleWhite;

    // CSImageView is a class which of the type UIViewController
    imageVie = [[CSImageView alloc] init];
    [scrollView2 addSubview:imageVie.view];
    [scrollView2 setContentSize:CGSizeMake(1500,1500)];
    [scrollView2 setScrollEnabled:YES];
    [imageView release];
}
  

Теперь из родительского контроллера представления я хочу вызвать say:

imageVie.redraw(); метод

Код для CSImageView

 @interface CSImageView : UIViewController {

    NSNumber *imageId ;

}

@property (nonatomic, retain) NSNumber *venueId;

-(void) redraw;
@end


@implementation CSImageView


@synthesize imageId;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


-(void) redraw {
    NSLog(@"I am ehre in the test function");
}
@end
  

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

Ответ №1:

Во-первых, CSImageView вероятно, это должен быть подкласс UIView , а не UIViewController . Вы должны сохранить ссылку на свой экземпляр (т. Е. как переменную экземпляра или синтезированное свойство), чтобы вы могли получить к нему доступ из методов, отличных от - down: .

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

1. Эй, Кэмерон, я пытался сделать то же самое. Но я не смог получить доступ к этому методу. Любой ввод в том же направлении был бы оценен. Пожалуйста, дайте мне знать, как продолжить то же самое.

Ответ №2:

Вау.

Я не могу сказать, что следую тому, что вы закодировали, но вот как вы это делаете.

В этой части … добавьте тег к представлению

// CSImageView — это класс типа UIViewController
imageVie = [[CSImageView alloc] init];
imageVie.tag = 99 // Любое число. Предпочтительно константу
[scrollView2 addSubview:imageVie.view]; …

Затем в родительском

контроллер представления. Вы можете …

-(IBAction) down: (id) отправитель {

 CSImageView *view = [scrollView2 viewWithTag:99];
[view redraw]; 
  

… }

Что-то вроде этого.