Открыть URL с помощью UIButton - PullRequest
       28

Открыть URL с помощью UIButton

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

Надеюсь, у вас все хорошо, я несколько недель работал на iphone, и в данный момент у меня возникла проблема, попробуйте открыть сафари с помощью URL, у меня есть файл json, который приходит с URL, который является динамичным. 1001 *

здесь я оставляю код.

- (void) loadFiles {

NSArray *_json = [[[self getDataFromJson] objectAtIndex:0] retain];
if ([_json count] > 0)
{
 for (int i = 0; i < [_json count]; i++)
 {
  NSDictionary *file = [_json objectAtIndex:i];

  UIImage *buttonImage = [UIImage imageNamed:@"btn.png"];
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  [button setImage:buttonImage forState:UIControlStateNormal];

  [button addTarget:self action:@selector(openBrowser:) forControlEvents:UIControlEventTouchUpInside];

  //works but i have warnings
  button.tag = [file objectForKey:@"linkURL"] ;
  CGRect frame = CGRectZero;
  frame.size = buttonImage.size;
  button.frame = frame;

  NSString *name = [file objectForKey:@"name"];
  NSString *description = [file objectForKey:@"description"];


            //Create Box 

 }
}
}

- (void) openBrowser:(id)sender
{ 
 NSString *url = ((UIControl *) sender).tag;
 [[UIApplication sharedApplication]  openURL:[NSURL URLWithString:url] ];
}

Мне нужно открыть из UIButtom URL без жалоб. Любое предложение или помощь, спасибо. Ура

Ответы [ 2 ]

4 голосов
/ 20 января 2011

Подкласс UIButton и добавьте свойство для хранения URL.

// MyButton.h
@interface MyButton : UIButton {
    NSString *urlString_;
}

@property (nonatomic, retain) NSString *urlString;

@end



// MyButton.m
#import "MyButton.h"

@implementation MyButton

@synthesize urlString = urlString_;

- (void)dealloc {
    [self setUrlString:nil];
    [super dealloc];
}

@end

, а затем вы продолжите с вашим кодом:

#import "MyButton.h"
.
.
.
- (void) loadFiles {

    NSArray *_json = [[[self getDataFromJson] objectAtIndex:0] retain];
    if ([_json count] > 0)
    {
        for (int i = 0; i < [_json count]; i++)
        {
            NSDictionary *file = [_json objectAtIndex:i];

            UIImage *buttonImage = [UIImage imageNamed:@"btn.png"];
            MyButton *button = [MyButton buttonWithType:UIButtonTypeCustom];
            [button setImage:buttonImage forState:UIControlStateNormal];

            [button addTarget:self action:@selector(openBrowser:) forControlEvents:UIControlEventTouchUpInside];

            //works but i have warnings
            button.urlString = [file objectForKey:@"linkURL"] ;
            CGRect frame = CGRectZero;
            frame.size = buttonImage.size;
            button.frame = frame;

            NSString *name = [file objectForKey:@"name"];
            NSString *description = [file objectForKey:@"description"];


            //Create Box 

        }
    }
}

- (void) openBrowser:(id)sender {
    if ([sender isKindOfClass:[MyButton class]]) {
        [UIApplication sharedApplication] openURL:[NSURL URLWithString:[[(MyButton *)sender urlString]]];
    }
}
3 голосов
/ 20 января 2011
Тег

имеет тип int.Таким образом, вы не можете хранить NSString URL здесь.Вам нужно хранить URL-адреса в каком-то другом месте, может быть в NSMutableArray.Сохраните индекс i в теге кнопки и сохраните URL в NSMutableArray в позиции i.Затем в обработчике кнопок используйте тег в качестве индекса для получения URL-адреса из этого NSMutableArray.

И не связанный с вопросом, вы не выпускаете _json NSArray.Итак, у вас течет память.А также вам не нужно проверять if ([_json count] > 0).Ваш цикл for уже обрабатывает это.

...