UE4 IOS 原生输入框弹出框打开以及Crash

在UE4.26.2项目中,未勾选使用IOS原生弹出框选项会导致点击已有内容的弹框时应用崩溃。解决方案是通过修改引擎源码,具体涉及IOSPlatformTextField.h和IOSPlatformTextField.cpp文件中的内存管理部分,将NSString替换为NSMutableString以避免释放错误。参照Unreal论坛上的方法,修改缓存文本内容的处理方式,避免了Crash的发生。
摘要由CSDN通过智能技术生成

如果打开IOS原生弹出框

在这里插入图片描述

不勾选这个选项就会自动弹出IOS原生弹框,优点是可以进行复制粘贴之类的

UE4.26.2,我的项目中未勾选了这个选项会出现了弹出框并且如果弹出框中如果原本有内容,点击之后会出现Crash

解决方案:参考Unreal 论坛中发现了类似的解决方案以及方法,在Mac上通过修改源码引擎来解决,具体修改如下:

\Engine\Source\Runtime\Slate\Public\Framework\Text\IOS\IOSPlatformTextField.h 33行

@interface SlateTextField : UIAlertController
{
TWeakPtr<IVirtualKeyboardEntry> TextWidget;
FText TextEntry;

bool bTransitioning;
bool bWantsToShow;
//- NSString* CachedTextContents;
//- NSString* CachedPlaceholderContents;
NSMutableString* CachedTextContents; //+
NSMutableString* CachedPlaceholderContents; //+

\Engine\Source\Runtime\Slate\Private\Framework\Text\IOS\IOSPlatformTextField.cpp 186 行


-(void)show:(TSharedPtr<IVirtualKeyboardEntry>)InTextWidget text:(NSString*)TextContents placeholder:(NSString*)PlaceholderContents keyboardConfig:(FKeyboardConfig)KeyboardConfig
{
TextWidget = InTextWidget;
TextEntry = FText::FromString(TEXT(""));
//- if(CachedTextContents != nil)
//- {
//- [CachedTextContents release];
//- }
//- if(CachedPlaceholderContents != nil)
//- {
//- [CachedPlaceholderContents release];
//- }

[CachedTextContents setString : TextContents] ; //+
[CachedPlaceholderContents setString : PlaceholderContents] ; //+
//- CachedTextContents = [TextContents copy]; // This is the line that throws the error 
//- CachedPlaceholderContents = [PlaceholderContents copy];
CachedKeyboardConfig = KeyboardConfig;
bWantsToShow = true;

以及 144行

-(void)hide
{
bWantsToShow = false;
if(CachedTextContents != nil)
{
//- [CachedTextContents release];
CachedTextContents = nil;
}
if(CachedPlaceholderContents != nil)
{
//- [CachedPlaceholderContents release];
CachedPlaceholderContents = nil;
}

参考论坛链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值