0

サブクラス化したサブビューに textField があります。ここで、元のビューで textField のデリゲート メソッドを呼び出したいと思います。

このコードで試してみましたが、どういうわけかメソッドが呼び出されません:

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

「NewImageViewController」は私の元のビューです。

編集:

私の 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

Subview.m の viewDidLoad :

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");
}
4

2 に答える 2

1

サブビューのプロパティとして UITextField を作成しているため

このようにしてください

あなたのケースに似たサンプルコードを投稿しています。これが役立つことを願っています。

 #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


于 2013-07-26T06:46:37.930 に答える
0

元のビューでデリゲートを設定する代わりに、textField が配置されているサブビューでデリゲート メソッドを実装できます。

次のようなサブビューのプロトコルを実装できます。

ファイル 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
}

これがお役に立てば幸いです。:)

于 2013-07-25T19:27:07.720 に答える