2013-07-25 2 views
0

У меня есть textField в подзаголовке, который я подклассифицировал. Теперь я хочу вызвать методы делегата textField в моем изначальном представлении.Делегат TextField в другом ViewController

Я пробовал этот код, но почему-то методы не называют:

NewImageViewController *ni = [[NewImageViewController alloc] init]; 
textField.delegate = ni; 

«NewImageViewController» моя точка зрения происхождения.

EDIT:

Мои Subclass.h:

#import <UIKit/UIKit.h> 

@protocol SubviewProtocol<NSObject> 
- (void) textFieldDidEndEditing:(UITextField *)inTextField; 
- (void) textFieldDidBeginEditing:(UITextField *)inTextField; 
@end 

@interface PopOverViewController : UIViewController <FPPopoverControllerDelegate> 

@property (strong, nonatomic) UITextField *textField; 
@property (nonatomic, assign) id<SubviewProtocol> delegate; 

@end 

viewDidLoad в Subview.m:

textField = [[UITextField alloc] initWithFrame:CGRectMake(5, 5, 170, 30)]; 
    textField.placeholder = @"Example"; 
    textField.backgroundColor = [UIColor whiteColor]; 
    textField.alpha = 0.9; 
    textField.borderStyle = UITextBorderStyleLine; 
    textField.layer.borderColor = [[UIColor grayColor]CGColor]; 
    textField.textColor = [UIColor blackColor]; 
    textField.delegate = self; 
    [self.view addSubview:textField]; 

делегат методы в NewImageViewController.m:

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    NSLog(@"asd"); 
} 

-(void)textFieldDidEndEditing:(UITextField *)textField { 
    NSLog(@"fgh"); 
} 
+0

Я думаю, что мы пе ed немного больше кода. Могут быть много причин. Вы подключили IBOutlets? – onnoweb

ответ

1

Так как и делают UITextField как собственность в вашем подвид

просто нравится этот

я вывешиваю пример кода, который похож на ваш случай надеюсь, что это помогает у просто пройти через это ему может помочь U

#import "SubView.h" 
@implementation SubView 
@synthesize aTextField; 

- (id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 
    // Initialization code 
    UITextField *atextField = [[UITextField alloc]initWithFrame:CGRectZero]; 
    self.aTextField = atextField; 
    [self addSubview:atextField]; 
    [atextField release]; 

    } 
return self; 
} 

    -(void)dealloc{ 
    [self.aTextField release]; 
    [super dealloc]; 
    } 

//i am setting the frame hear 
-(void)layoutSubviews 
    { 
     self.aTextField.frame = CGRectMake(20,30, 100, 45); 


    } 

    @end 


    // in your main view 

    #import "ViewController.h" 
    #import "SubView.h" 

    @interface ViewController()<UITextFieldDelegate> // add this 

    @end 

    @implementation ViewController 

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

    //see below lines carfully 
     SubView *subView = [[SubView alloc]initWithFrame:self.view.frame]; 

    subView.aTextField.delegate = self; // you need do this 
    subView.aTextField.placeholder = @"type hear"; 
    subView.aTextField.backgroundColor = [UIColor greenColor]; 

    [self.view addSubview:subView]; 

    } 

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

    //check out in main view 
    -(void) textFieldDidEndEditing:(UITextField *)inTextField 
    { 
      NSLog(@"textField end editing"); 
    } 
    - (void) textFieldDidBeginEditing:(UITextField *)inTextField 
     { 
      NSLog(@"textField begin editing"); 
     } 


    @end 


+0

Спасибо большое :) – Sebastian

0

Вместо задания делегата в представлении происхождения вы можете реализовать методы делегата в подвью, в котором находится текстовый элемент.

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

В файле YourSubview.h

@protocol YourSubviewProtocol<NSObject> 
- (void) textFieldDidEndEditing:(UITextField *)inTextField; 
- (void) textFieldDidBeginEditing:(UITextField *)inTextField; 
@end 
@interface YourSubview 
@property (nonatomic, assign) id<YourSubviewProtocol> delegate; 
//properties and methods 

@end 

В файле реализация, т.е. YourSubview.m, вы должны назвать этот делегат методы изнутри методов TextField делегата, что-то вроде этого

[[self delegate] textFieldDidBeginEditing:textField]; 

В файле NewImageViewController.h

@interface NewImageViewController<YourSubviewProtocol> 

//properties and methods 

@end 

В файле NewImageViewController.m, вы должны реализовать методы делегата:

- (void) textFieldDidEndEditing:(UITextField *)inTextField; 
{ 
    //do the operation 
} 
- (void) textFieldDidBeginEditing:(UITextField *)inTextField; 
{ 
    //do the operation 
} 

Надеется, что это помогает, все самое лучшему! :)

+0

Хм, не работает для меня, я редактирую свой вопрос выше с помощью некоторого кода. – Sebastian

+0

@Sebastian Я думаю, что вы должны сделать это в файле .h PopOverViewController: UIViewController Может быть, вы не включили эту линию, из-за которой мы получаем этот вопрос. – An1Ba7

+0

Я включил его, но он все еще не работает. – Sebastian

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