Передача URL в метод - PullRequest
       3

Передача URL в метод

0 голосов
/ 26 января 2011

Привет, у меня есть вопрос,

Я могу успешно получить хранилище строк UrL в переменной "imageName" в методе showImage.

Мне нужно сделать то же самое в этомметод "segmentedControlIndexChanged", но я не могу получить переменную "imageName".

В любом случае я могу объявить метод IBAction для работы так же, как метод showImage?

Я попробовал -> "-(IBAction) segmentedControlIndexChanged:(NSString *)imageName{}", но это не работает, я не могу получить переменную "imageName".

- (void) showImage:(NSString *)imageName

{

      NSData *imageData; 


      //NSString * string1 = [NSString stringWithFormat:imageName];

      imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imageName]];

      //NSLog(@"%@",imageName);

      image = [[UIImage alloc] initWithData:imageData];

      self.imageView.image = image;

      [imageView setFrame:CGRectMake(5, 10, image.size.width, image.size.height)]; 

      [scrollview setScrollEnabled:YES];

      if(image.size.height+20 >= 224)

      {

            [scrollview setContentSize:CGSizeMake(289, image.size.height + 20)];

      }

      else {

            [scrollview setContentSize:CGSizeMake(289, 224)];

      } 


} 


//////// 



-(IBAction) segmentedControlIndexChanged{ 




      switch (self.segmentedControl.selectedSegmentIndex) {

            case 0:

                  image = [UIImage imageNamed:image1name];

                  self.imageView.image = image;

                  [imageView setFrame:CGRectMake(5, 10, image.size.width, image.size.height)];

                  [scrollview setScrollEnabled:YES];

                  if(image.size.height+20 >= 224)

                  {

                        [scrollview setContentSize:CGSizeMake(289, image.size.height + 20)];

                  }

                  else {

                        [scrollview setContentSize:CGSizeMake(289, 224)];

                  }

                  break; 


            case 1:

                  image = [UIImage imageNamed:image2name];

                  self.imageView.image = image;

                  [imageView setFrame:CGRectMake(5, 10, image.size.width, image.size.height)];

                  [scrollview setScrollEnabled:YES];

                  [scrollview setContentSize:CGSizeMake(289, image.size.height+20)];

                  break;

            case 2:

                  image = [UIImage imageNamed:image3name];

                  self.imageView.image = image;

                  [imageView setFrame:CGRectMake(5, 10, image.size.width, image.size.height+1)];

                  [scrollview setScrollEnabled:YES];

                  [scrollview setContentSize:CGSizeMake(289, image.size.height+20)];

                  break;

            default:

                  break; 


      }

}

РЕДАКТИРОВАТЬ

Я столкнулся с ошибкой Bad Access, кто-нибудь знает, что это значит, или кто-нибудь может показать мне некоторые способы ее устранения?

1 Ответ

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

Нет, IBAction может иметь только одну из следующих трех подписей в iOS:

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event

РЕДАКТИРОВАТЬ

Вы можете расширить UIButton для сохранения значения, которое вынужно, например:

@interface MyButton : UIButton {
}

@property (nonatomic, retain) NSString *url;

@end

...

@implementation MyButton

@synthesize url;

@end

...

- (void)buttonTapped:(id)sender {
    MyButton *button = (MyButton *)sender;
    UIImage *image = [UIImage imageNamed:button.url];
    ...
}

РЕДАКТИРОВАТЬ

Вы можете использовать теги, чтобы различать разных отправителей, например

enum {
    ButtonOneTag = 128,
    ButtonTwoTag,
    ...
}

...

- (void)buttonTapped:(id)sender {
    UIButton *button = (UIButton *)sender;
    switch(button.tag) {
        case ButtonOneTag:
            NSLog(@"Button One Tapped");
            break;
        case ButtonTwoTag:
            NSLog(@"Button Two Tapped");
            break;
}

Вы также можете простосравните отправителя с ivars для кнопок следующим образом:

- (void)buttonTapped:(id)sender {
    //assuming buttonOne and buttonTwo are IBOutlets on this class
    if (sender == self.buttonOne) {
        NSLog(@"Button One Tapped");
    else if (sender == self.buttonTwo) {
        NSLog(@"Button Two Tapped");
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...