我在Objective C中如何声明实例属性?

时间:2016-06-20 05:06:13

标签: ios objective-c xcode uitextfield uikit

我试图在Objective C中为UITextField对象声明以下实例属性:

@property(nonatomic) BOOL clearsOnInsertion;

我将在哪里声明并正确地将其链接到我在main.storyboard中创建的文本字段,以便在用户开始输入时它具有清除文本所需的效果?

2 个答案:

答案 0 :(得分:1)

您可以在.h和.m文件中声明它 在.h文件中,你可以这样做

#import <Foundation/Foundation.h>
@interface ViewController : UIViewController

@property(nonatomic) BOOL clearsOnInsertion;
@property(nonatomic,strong) IBOutlet UITextField tfTextField;
@end

要在助理编辑器中连接插座转到故事板开放视图控制器类,然后按ctrl并将其拖动到所需的文本字段

在.m文件中你可以这样做

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic) BOOL clearsOnInsertion;

@end

@implementation ViewController

为了在用户开始输入时清除文本的效果,您需要在.h或.m文件中添加UITextField委托并使用.m文件中的委托方法

.h文件

#import <Foundation/Foundation.h>
@interface ViewController : UIViewController<UITextFieldDelegate>
@end

.m文件

-(void)textFieldDidBeginEditing:(UITextField *)textField
 {
   clearsOnInsertion = YES;
 }

-(void)textFieldDidEndEditing:(UITextField *)textField
 {
  clearsOnInsertion = NO;
 }

-(BOOL)textFieldShouldReturn:(UITextField *)textField
 {
  clearsOnInsertion = NO;
 }

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if(clearsOnInsertion)
  {
    textField.text = @""
    clearsOnInsertion = NO;
  }
}

答案 1 :(得分:0)

一个。一般来说:

你必须在.h文件中声明声明的属性是完全错误的:

a)您必须在接口中声明实例属性。至少有三种类型的接口:

  • 带有@interface … : …
  • 的“真实”主要(类)界面
  • 课程延续@interface …()
  • 类别界面@interface …(…)

其中是班级名称。

b)没有规则必须将接口放在.h文件中。没有规则。 通常类连续符位于.m文件中。这就是它们的用途(见B)。 通常类别接口和类接口位于.h文件中。但是如果你想保留一些小的私有,那么将类接口放在.m文件中也没有错。

对于编译器来说它没有任何意义,因为它在编译开始时合并了所有包含的头文件,然后不知道源代码的来源。 (说实话,他知道更好的错误信息,但他的工作并不依赖于它。)

B中。不太通用

您必须在某个位置放置一个接口,应该读取它的人,可以读取它。由于属性通常是公共可访问的,而且.h文件是公共可读的,很明显,在许多情况下将它们放入.h是正确的选择。但是有一个私有属性的概念用于信息隐藏和封装。

℃。在你的情况下

在早些时候,IB只能读取放在.h文件中的插座。这样做的缺点是你必须公开所有网点,即使有一个私人类捆绑组合,只有IB应该访问该网点。

从版本what.ever开始,你可以把它放在.m文件中的类继续中,以保持它们的私密性。在许多情况下,这是一个不错的选择。