2015-09-15 4 views
0

У меня есть метод в ViewController, чтобы нарисовать кнопку. В ViewController2 я хочу вызвать метод и вычеркнуть кнопку.Вызов метода из одного класса и используемый в другом классе

В ViewController.h

@interface ViewController : UIViewController 

-(void)method; 
@end 

ViewController.m

@implementation ViewController 

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

-(void)method{ 
    UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside]; 
    [Touch1 setFrame:CGRectMake(50,50, 100, 100)]; 
    Touch1.translatesAutoresizingMaskIntoConstraints = YES; 
    [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal]; 
    [Touch1 setExclusiveTouch:YES]; 
    [self.view addSubview:Touch1]; 

    NSLog(@"hi "); 
} 

-(void)TouchButton1:(UIButton*)sender{ 

    NSLog(@"hi again"); 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

Тогда я пытаюсь позвонить из ViewController2

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ViewController * ViewCon = [[ViewController alloc]init]; 
    [ViewCon method]; 
} 

NSLog показывает правильный текст, но ни одна кнопка не была создана , В чем моя проблема?

Благодаря

+0

плз добавить полную информацию, так что я могу вам помочь –

ответ

1

Я думаю, что эта проблема вызвана областью «я» на методе метода. Ваша кнопка была добавлена ​​в firstView, а не в secondView. Чтобы делать то, что вы хотите, вам придется передать область, которую вы хотите добавить. Как образец, заданный @trojanfoe.

-(void)method:(UIView *)_view { 
    UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside]; 
    [Touch1 setFrame:CGRectMake(50,50, 100, 100)]; 
    Touch1.translatesAutoresizingMaskIntoConstraints = YES; 
    [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal]; 
    [Touch1 setExclusiveTouch:YES]; 
    [_view addSubview:Touch1]; 

    NSLog(@"hi "); 
} 

И в вашу вторую точку зрения можно назвать:

ViewController * ViewCon = [[ViewController alloc]init]; 
[ViewCon method:self.view]; 

я думаю будет проблема, я надеюсь, что поможет вам

+1

Это ужасная картина, поскольку она неэффективна и неудобна. – trojanfoe

+0

Создайте класс, который будет иметь вашу функцию, более многоразовый. Если есть другая часть вашего кода, которая использует ту же логику для реализации этой кнопки, вы можете использовать класс «utils» и не использовать реплицируемый код. Но если ваша проблема является сложной проблемой, которая будет использоваться всего один раз для всего вашего кода, разделительный класс является более сложным способом решения простой проблемы. Но действительно ли такая категория, как @trojanfoe, в заключительной части их ответа является умным решением. – Ostanik

1

Создать отдельный класс (так называемый Utils, например) с методом класса, который может быть вызван из обоих контроллеров отображения:

@implementation Utils 

+(void)methodForView:(UIView *)view 
{ 
    UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside]; 
    [Touch1 setFrame:CGRectMake(50,50, 100, 100)]; 
    Touch1.translatesAutoresizingMaskIntoConstraints = YES; 
    [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal]; 
    [Touch1 setExclusiveTouch:YES]; 
    [view addSubview:Touch1]; 
} 

@end 

И называть это так:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [Utils methodForView:self.view]; 
} 

Или еще лучше реализовать метод в классе UIViewController -subclass, а затем вывести все остальные контроллеры представлений из этого базового класса.

Смежные вопросы