【问题标题】:Custom `UITextField` subclass doesn't appear on the screen自定义 `UITextField` 子类未出现在屏幕上
【发布时间】:2021-03-19 21:20:24
【问题描述】:

我正在开发一个颤振插件。我与 Swift 一起使用的库有一个 UITextField 子类。我无法在屏幕上显示这个子类。只有当我使用 UITextField 对象尝试它时,它才会出现在屏幕上。如何在屏幕上显示此对象?

我的代码

dnmTextField = DnmTextField(frame: rc)
dnmTextField?.autoresizingMask = .flexibleWidth
dnmTextField?.layer.borderWidth = 1.0
dnmTextField?.layer.borderColor = UIColor.black.cgColor
dnmTextField?.clipsToBounds = true
dnmTextField?.keyboardType = UIKeyboardType.numberPad
dnmTextField?.textAlignment = .center
dnmTextField?.backgroundColor = UIColor.black
dnmTextField?.placeholder =  (args!["placeholder"] as! String)

let presentedViewController = viewController?.presentedViewController
let currentViewController: UIViewController? = (presentedViewController ?? viewController)
currentViewController?.view.addSubview(dnmTextField!)

自定义 UITextField 子类参考

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@protocol DnmTextFieldDelegate <NSObject>

@optional

- (void) dnmTextFieldShouldBeginEditing:(NSInteger)typeId;

- (void) dnmTextFieldDidBeginEditing:(NSInteger)typeId;

- (void) dnmTextFieldDidEndEditing:(NSInteger)typeId;

- (void) dnmTextFieldEditingChange:(NSInteger)typeId;

- (void) dnmTextFieldDidClear:(NSInteger)typeId;

@end

@interface DnmTextField : UITextField
- (void)setSystemId:(NSString*)systemId;
- (void)setMaxLength:(NSUInteger)maxLength;
- (void)setType:(NSInteger)typeId;
- (BOOL)isEqualTo:(DnmTextField*)textField2;
- (void)clear;
- (BOOL)validateInput;
- (BOOL)isEmpty;
- (void)setSystemIdforGet:(NSString*)system_Id;
- (void)setTextAlignment:(NSTextAlignment)textAlignment;
- (NSInteger)getTextLength;

@property (nonatomic, weak) id<DnmTextFieldDelegate> dnmDelegate;

@property (nonatomic, assign) UIEdgeInsets edgeInsets;
@property (nonatomic, assign) NSDictionary *attrDictionary;

@property (nonatomic)  NSUInteger maxLength;


@end


#endif

【问题讨论】:

  • 你能展示一下DnmTextField类的实现吗?
  • 它是一个静态库,所以我无法查看它的内容。
  • 不查看代码我们找不到问题。我建议1)。查看为该库打印的日志。查找该类的任何异常。 2.捕获视图层次结构,并检查是否添加了视图。如果添加了什么是视图框架。
  • 你能提供一个有这个问题的示例项目吗?捕获视图层次结构说明了什么?即使外部代码相同,子类可能会覆盖布局方法,这将导致大小为零

标签: ios objective-c swift flutter flutter-plugin


【解决方案1】:

目前最可能的原因是您将文本字段框架设置为零。视图在屏幕上的 (0, 0) 处,其大小为 (0, 0) - 因此您不会看到文本字段。

为了便于测试,请将背景颜色设置为显眼的颜色:

dnmTextField.backgroundColor = .red

并使用非零尺寸框架创建视图:

dnmTextField = DnmTextField(frame: CGRect(x: 50, y: 50, width: 100, height: 50))

【讨论】:

  • 你好其实我确定框架区域是正确的。因为当我将 DnmTextField 对象更改为 UITextField 时,一切正常。
  • @TurkC 你使用同一个构造函数吗?
【解决方案2】:

创建xcodeproject 并将此视图添加到 ViewController 的视图中,并确保此属性在本机 iOS 项目中有效

func viewDidLoad() {
   super.viewDidLoad() 
   dnmTextField = DnmTextField(frame: UIScreen.main.bounds)
   view.addSubView(dnmTextField)
}

如果不起作用,请尝试在Debug View Hierarchy 中查找 textField,如果不存在,则将 textField 添加到视图的子视图时存在问题

如果不是,问题出在 textField 的框架上

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多