Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UITextField无法通过JavaScriptCore iOS7工作_Ios_Objective C_Ios7_Uitextfield_Javascriptcore - Fatal编程技术网

UITextField无法通过JavaScriptCore iOS7工作

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

我最近开始在iOS 7中探索JavaSciptCore

到目前为止,我已经能够使用JSCore使用UILabel、UIButton和其他一些UI元素

但是现在我在使用UITextField时被卡住了。由于某种原因,它不会出现在屏幕上,但所有代码都会被执行

因此,my.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:时,它显示了文本字段的一部分,就好像根视图控制器是可视屏幕的一部分一样!所以无论我设置了什么帧,都不能看到超过一半的文本字段


有什么想法吗?

我对CocoaScript有一些经验,CocoaScript是JSTalk的新名称,它是JavaScriptCore for OS X的包装器。它不在iOS上运行,但据我所知可以移植,所以也许你想尝试移植它


我不确定CoCoScript做了什么不同的事情,或者您做了什么不同的事情,但我完全可以在这段javascript中使用文本字段:

确保您对文本字段所做的任何更改都在主线程上。我不是在回答这个问题,因为我不确定JSC calls methods.JS context在主线程上运行的是哪个线程。在不理解其余代码的情况下提供建议有点困难。例如,是否在UITextField之后创建任何其他控件?makeRootViewController未显示的代码中发生了什么?您可以尝试在创建的所有控件周围添加边框,以查看是否有任何内容遮挡了UITextField。您也可以在绘制视图后尝试设置断点,并在将UITextField框架和层附着到父对象并进行渲染后检查它。@Mike好的,我已经完成了所有这些。因为我只在视图上使用UITextField进行了测试,所以没有任何东西会模糊它。我确实在每一行上都设置了断点,但一切看起来都很好——适当的帧、父级等等。makeRootViewController simple使rootVC成为一个视图控制器,作为根视图控制器。