【发布时间】:2014-04-27 14:09:38
【问题描述】:
我最近开始在 iOS 7 中探索 JavaSciptCore。
到目前为止,我已经能够使用 UILabel、UIButton 和其他一些使用 JSCore 的 UI 元素。
但现在我在使用 UITextField 时被卡住了。由于某种原因,它没有出现在屏幕上,但所有代码都在执行。
所以我的 .h 文件在接口中实现的协议中有以下内容。
- (void)set:(JSValue *)config;
+ (id)create;
在我的 .m 文件中,我定义了上述函数。
+ (RZTextField *)create
{
RZTextField *textField = [[RZTextField alloc] init];
return textField;
}
-(void)set:(JSValue *)config
{
if (![config[@"text"] isUndefined]) {
self.text = [config[@"text"] toString];
}
if (![config[@"textColor"] isUndefined]) {
self.textColor = [Utils makeColor:[config[@"textColor"] toArray]];
}
if (![config[@"frame"] isUndefined]) {
self.frame = [Utils makeFrame:[config[@"frame"] toArray]];
self.keyboardType = UIKeyboardTypeDefault;
self.borderStyle = UITextBorderStyleRoundedRect;
}
if (![config[@"background"] isUndefined]) {
self.background = [Utils makeColor:[config[@"background"] toArray]];
}
}
最后这是被执行的 JS 代码:
//root view controller is created
App.rootVC = UI.ViewController.create();
App.rootVC.makeRootViewController();
App.rootVC.set({ background: [231, 76, 60, 1] });
App.textF = UI.TextField.create();
App.textF.set({
frame:[20, 500, 300, 120],
text: "some text",
textColor:[255, 255, 255, 1],
background:[255, 255, 255, 1]
});
App.rootVC.append(App.textF);
我自己做了一些调试,所以以下几点是:
- 我已经设置了断点并检查了。它适用于所有函数调用。所以一切都在执行。
- 根视图控制器工作正常,我已经能够添加其他 UI 元素就好了。
- UITextField 被成功附加。我知道这一点是因为当我检查文本字段的父级时,它会返回根视图控制器的地址。
- 出于某种原因,当我从create 函数中执行initWithFrame: 时,它显示了文本字段的一部分,就好像根视图控制器是可见屏幕的一部分一样!所以无论我设置什么frame,都看不到超过一半的文本字段!
有什么想法吗?
【问题讨论】:
-
确保您对文本字段所做的任何更改都在主线程上。我没有将此作为答案发布,因为我不确定 JSC 在哪个线程上调用方法。
-
JS 上下文正在主线程上运行。
-
在不了解其余代码的情况下提供建议有点困难。例如,您是否在 UITextField 之后创建任何其他控件? makeRootViewController() 未显示的代码中会发生什么?
-
您可以尝试在所有创建的控件周围添加边框,以查看是否有任何东西遮挡了 UITextField。您还可以尝试在绘制视图后设置断点,并在 UITextField 框架和图层附加到父级并渲染后检查它。
-
@Mike 好吧,我已经完成了所有这些。由于我只在视图上使用 UITextField 进行了测试,因此没有任何注意事项会掩盖它。我确实在每一行都设置了断点,但一切似乎都很好 - 适当的框架、父级等。 makeRootViewController() 简单使得 rootVC(视图控制器)作为根视图控制器。
标签: ios objective-c ios7 uitextfield javascriptcore