UITextField无法通过JavaScriptCore iOS7工作
我最近开始在iOS 7中探索JavaSciptCore 到目前为止,我已经能够使用JSCore使用UILabel、UIButton和其他一些UI元素 但是现在我在使用UITextField时被卡住了。由于某种原因,它不会出现在屏幕上,但所有代码都会被执行 因此,my.h文件在接口中实现的协议中包含以下内容UITextField无法通过JavaScriptCore iOS7工作,ios,objective-c,ios7,uitextfield,javascriptcore,Ios,Objective C,Ios7,Uitextfield,Javascriptcore,我最近开始在iOS 7中探索JavaSciptCore 到目前为止,我已经能够使用JSCore使用UILabel、UIButton和其他一些UI元素 但是现在我在使用UITextField时被卡住了。由于某种原因,它不会出现在屏幕上,但所有代码都会被执行 因此,my.h文件在接口中实现的协议中包含以下内容 - (void)set:(JSValue *)config; + (id)create; 在我的.m文件中定义了上述函数 + (RZTextField *)create { RZT
- (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:时,它显示了文本字段的一部分,就好像根视图控制器是可视屏幕的一部分一样!所以无论我设置了什么帧,都不能看到超过一半的文本字段
有什么想法吗?我对CocoaScript有一些经验,CocoaScript是JSTalk的新名称,它是JavaScriptCore for OS X的包装器。它不在iOS上运行,但据我所知可以移植,所以也许你想尝试移植它
我不确定CoCoScript做了什么不同的事情,或者您做了什么不同的事情,但我完全可以在这段javascript中使用文本字段:确保您对文本字段所做的任何更改都在主线程上。我不是在回答这个问题,因为我不确定JSC calls methods.JS context在主线程上运行的是哪个线程。在不理解其余代码的情况下提供建议有点困难。例如,是否在UITextField之后创建任何其他控件?makeRootViewController未显示的代码中发生了什么?您可以尝试在创建的所有控件周围添加边框,以查看是否有任何内容遮挡了UITextField。您也可以在绘制视图后尝试设置断点,并在将UITextField框架和层附着到父对象并进行渲染后检查它。@Mike好的,我已经完成了所有这些。因为我只在视图上使用UITextField进行了测试,所以没有任何东西会模糊它。我确实在每一行上都设置了断点,但一切看起来都很好——适当的帧、父级等等。makeRootViewController simple使rootVC成为一个视图控制器,作为根视图控制器。