菜鸟教程小白 发表于 2022-12-12 18:41:17

ios - 创建自定义 iOS 越狱键盘


                                            <p><p>我已经开发了一个自定义输入法,现在想开发一个可以在 iOS 中将其注册为键盘的调整。</p>

<p>Cydia中有很多不同的键盘(主要来自中国的开发者)比如触宝、百度输入等,在设置中作为键盘出现,所以肯定是有可能的。</p>

<p>我曾尝试研究以下选项(在 IDA 中只用了 4 天,Xcode 与 theos 和控制台):</p>

<ul>
<li>位于/System/Library/TextInput 中的文本输入包 — 似乎与键盘本身无关?缺少一些父类(super class) header (即 TIZephyr... 类),所以我无法弄清楚。但是,原生集成会很棒。</li>
<li>TextInput 私有(private)框架——似乎也只用于字典等</li>
<li>UIKit 的 UIKB.. 和 UIKeyboard.. 类 — UIKeyboardImpl 似乎与键盘功能有关,而 UIKeyboardLayout 是您构建的基础。</li>
</ul>

<p>我尝试 HookUIKeyboardDictationLayout 以在初始化时提供 UIKeyboardLayout 的普通实例 - 当我点击键盘上的麦克风按钮时,键盘变为空白!这种实现也会很好(即使不希望杀死听写功能)。但是,我也找不到在哪里发送打字事件。</p>

<p>所以要点是:</p>

<ul>
<li>什么负责将类注册为输入法?</li>
<li>什么负责接收打字事件?</li>
</ul>

<p>我问这个是希望已经有开发人员必须做类似的事情,因为我找不到任何文章或任何可以在头文件和包中给我提示的东西。</p>

<p>提前致谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我在今年 2 月做对了,尽管没有时间回复,而且现在 iOS 8 已经到来,这也不是很有必要了。
不过,这仍然是您加载自己的键盘的方式:</p>

<pre><code>%hook UIKeyboardInputMode

+ (id)keyboardInputModeWithIdentifier:(id)arg1 {
    id o = %orig;
    return o;
}
- (id)primaryLanguage {
    if(]) return @&#34;Tegaki&#34;;
    return %orig;
}
%end

%hook UIKeyboardImpl
/* This is where the magic is! */
+ (Class)layoutClassForInputMode:(NSString*)arg1 keyboardType:(int)arg2 {
    Class sass = %orig;
    if () {
      return ;
    }
    return sass;
}
%end



extern &#34;C&#34; NSArray*UIKeyboardGetSupportedInputModes();
extern &#34;C&#34; NSArray*UIKeyboardGetActiveInputModes();
static NSArray* (*orig_modes)();
NSArray* rep_modes() {
    NSArray* res = ];
    return res;
}

static NSArray* (*orig_active_modes)();
NSArray* rep_active_modes() {
    NSArray* res = orig_active_modes();
    return res;
}



%ctor {
    %init;
    MSHookFunction(UIKeyboardGetSupportedInputModes, rep_modes, &amp;orig_modes);
    MSHookFunction(UIKeyboardGetActiveInputModes, rep_active_modes, &amp;orig_active_modes);
}
</code></pre>

<p>其中 TegakiLayout 是 UIKeyboardLayout 的子类。</p>

<p>然后你实现 <code>- (BOOL)isAlphabeticPlane</code> 来返回它是否是一个传统的键盘,并在 <code>showKeyboardWithInputTraits:screenTraits:splitTraits:</code> 中创建自定义 View 。</p >

<p>要输入你,然后使用 <code>[insertText:@"\n"];</code>。</p>

<p>要创建一个“地球”按钮,请使用:</p>

<pre><code>Class sw = NSClassFromString(@&#34;UIInputSwitcherView&#34;);
[selectNextInputMode];
</code></pre>

<p>别忘了实现 <code>-keyboardName</code> 和 <code>-keyplaneName</code> !
我可能有一天会发布整个项目,但现在它太大了,无法在这里描述。不过,这应该足以让您启动并运行。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 创建自定义 iOS 越狱键盘,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21683820/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21683820/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 创建自定义 iOS 越狱键盘