小编Dea*_*ids的帖子

防止文本字段中的自定义键盘

我正在尝试自定义键盘如何影响我的应用.我在iPhone 6上安装了Swype.

我发现在我的一些视图中,我在文本字段上设置了自定义inputView属性,Swype键盘覆盖并呈现而不是我的选择器.这完全打破了我的UI,不能被允许.

有没有办法明确告诉iOS 8只使用我设置的inputView?

这可能是一个错误吗?允许第三方覆盖我的输入规范是不是完全没有预期的行为?

iphone inputview ios8 ios-keyboard-extension ios8-extension

13
推荐指数
3
解决办法
2824
查看次数

UISearchBar不会在UISplitviewController Master中响应

UITableviewUISplitviewController通用iOS9应用程序中有一个非常标准的主控制器设置.

再次,标准票价,我插入一个UISearchBar作为表的标题.

self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;

[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;

self.definesPresentationContext = YES;
Run Code Online (Sandbox Code Playgroud)

无需显示我的其余代码,搜索和所有按预期工作的内容iPhone.我的问题是搜索栏在运行时不会获得焦点或显示键盘iPad.没有回应,似乎没有接受.甚至没有响应以编程方式尝试becomeFirstResponder.

什么都没发生.

搜索栏可见且放置正确,没有底衬或叠加问题.

它工作正常iPhone.接收触摸,呈现键盘,搜索工作.据推测,UISplitviewController折叠时的呈现方式存在重大差异.通过几个小时的搜索,浏览文档和我遇到的每个教程,我都没有找到类似的经历,这是令人惊讶的.

附加说明:如果我使用多任务处理将分割视图缩小到iPad上折叠,则搜索栏将起作用,与之相同iPhone.它肯定与拆分视图的折叠状态有关.

更新:(越来越近)

经过进一步的实验,我发现如果您在横向上启动应用程序,搜索栏将在iPad上运行.在纵向模式下,我的主控制器被隐藏.它通过选择displayModeButtonItem设置为leftBarButtonItem细节控制器的滑入.那时,searchBar会中断并且不再响应触摸.

如果我从横向开始,然后旋转到肖像,它也会停止工作.旋转回景观并不能解决问题.一旦破裂,它会一直保持破碎状态直到重启.

我试着转向主控制器definesPresentationContextviewWillAppear方法,但这没有效果.

进一步更新:

另一个意想不到的情况是iPhone 6plus上的搜索栏完全没有问题.无论方向,折叠或否,都可以工作,无论它起始于哪个状态都无关紧要.我希望在横向时这与iPad相同.完全工作iPhone.

我还是没想出来.我最近尝试修复,我将所有搜索控制器初始化移动到该viewDidLayoutSubviews方法.没有任何改变.

此外,我注意到当搜索处于活动状态时,键盘在屏幕上,如果我旋转iPad,键盘会消失,但搜索栏仍保持活动状态.起初我没有意识到,然后我看到取消按钮仍然显示.它不会接受触摸,也没有键盘,但它显然仍然是第一响应者.

示例项目上传到GitHub: Github存储库

注意 - 在我将UISplitview Delegate方法添加到项目之前没有问题.我想立即将此问题添加到我的问题中,因此,我还没有尝试确切地看到这些委托方法如何影响搜索栏,但显然问题是在某处创建的.

更新:

我尝试了一些更多的变化没有成功.

  • 将搜索栏移动到节标题.没有快乐.
  • 将搜索栏放在UIView中作为内容视图.没有快乐. …

uisplitviewcontroller ios uisearchcontroller

13
推荐指数
1
解决办法
675
查看次数

如何在不关闭键盘的情况下隐藏inputAccessoryView

我在textView的inputAccessoryView属性中使用工具栏.当键盘显示时,它会按预期显示工具栏.旋转设备时,我想删除工具栏.我试过了:

 myTextView.inputAccessoryView.hidden = !layoutIsPortrait;
Run Code Online (Sandbox Code Playgroud)

这确实隐藏了工具栏,但留下了较高键盘的轮廓.键盘显然仍然适合工具栏.它看起来很糟糕并且会干扰潜在响应者的触摸事件.

 myTextView.inputAccessoryView = nil;
Run Code Online (Sandbox Code Playgroud)

仅当我resignFirstResponder,然后再次成为FirstResponder时才有效.这是不可接受的.我丢失了光标位置和textView的内容,键盘闪烁了.

[myTextView.inputAccessoryView removefromSuperview];
Run Code Online (Sandbox Code Playgroud)

什么都不做.我在iVar中保存了对工具栏的引用并将其解决了,

[myIvarReference removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

这有效,但键盘的较高轮廓再次隐约可见.这次它不会干扰其他视图的触摸.所以现在这是一个有效的解决方案,但在视觉上是不可接受的.我还可以尝试显示和隐藏inputAccessoryView吗?

屏幕截图 - 键盘上方的模糊线条是已删除工具栏的残余部分

已移除工具栏的旋转键盘

iphone uitoolbar uikeyboard ios

12
推荐指数
4
解决办法
1万
查看次数

NSLog在LLDB中没有输出.在GDB中工作

由于最近更新Xcode 4.3现在似乎默认为LLDB调试器.我刚刚发现我的NSLog语句没有显示在控制台中.在搜索了答案后,找不到,我切换回GDB并且工作正常.我发现其他人在LLDB中提到了NSLog,所以我不明白为什么它在我的情况下失败了.它应该不一样吗?LLDB有不同的方法吗?

debugging console objective-c ios xcode4

11
推荐指数
1
解决办法
5468
查看次数

iCloud Debug Gauge状态:已禁用

我创建了一个应用程序,使用iCloud测试Core Data Sync.该应用程序工作,设备之间的数据同步没有问题.

调试时,从Xcode(6)在设备上运行iCloud Debug Gauge表示Status:Disabled.我没有在下面的列表中看到我的容器和文件.有时,图表会显示一些下载,但似乎没有其他内容报告.

我确实在调试控制台中获得了预期的消息和日志输出,正如我所说,设备正在同步.在一个设备上添加的对象传播到另一个设备,删除并更新所有工作正常.

为什么测量仪表示禁用,为什么我没有看到调试信息?在Xcode中启用调试仪是否需要做些什么?

Xcode Debug Gauge截图

debugging ios icloud xcode6 ios8

11
推荐指数
1
解决办法
1250
查看次数

为什么状态栏旋转并且视图保持纵向

我的rootViewController是一个UITabbarController并包含UINavigationControllers.

为了限制旋转,因为iOS6,在一些但不是所有视图上,我已经将这两个控制器子类化,以尊重其最顶层或可见视图的shouldAutorotate响应.

这一切都很完美......大多数时候.

在一种情况下,从不允许旋转的视图(UITableviewController)开始.

我推出一个允许自动旋转的视图,旋转到横向然后再回到肖像.

然后当我弹出视图时,一切都很好看.

但是现在如果我旋转设备,状态栏就会单独旋转,在顶部留下一个空白区域并覆盖当前视图左侧的一部分.当前视图不会旋转(因为它不应该旋转).只有状态栏来回旋转.视图保持响应,接收触摸并正常工作,不以任何方式调整大小或响应旋转(因为它不应该).

此行为一直持续到我杀死并重新启动应用程序.一旦它发生,我找不到其他方法让它停止.重新启动时,所有工作正常,并将在不确定的持续时间内正常工作.我可以坐在那里推动,弹出,来回旋转我心中的内容,没有任何问题.

我从来没有能够在模拟器中重新创建它.

它没有明显的原因发生,我无法实现.我会说有85%的时间它正常工作.当我没有发生几天甚至几周时,我以为我已经多次修复了它.然后,突然之间又发生了.

我在任何描述此行为的论坛中找不到帖子,所以我甚至找不到开始调试的地方.状态栏如何从顶部到另一侧摆动,视图不会以任何方式调整大小或旋转或响应.如果我知道如何实现这一目标,我将有一席之地.

iphone autorotate ios uistatusbar

9
推荐指数
1
解决办法
3199
查看次数

3D Touch Peek View不会向上滑动以进行操作

我有一个表视图.在3D Touch上我预览了一个pdf QLPreviewController.偷看和流行音乐按预期工作.

出于某种原因,我无法让预览控制器视图向上滑动并显示我的操作项.我正在返回一个有效的UIPreviewActionItems数组(NSArray<id<UIPreviewActionItem>> *)previewActionItems.

出于某种原因,当显示peek时,没有任何滑动向上移动预览,并且没有任何操作项可见,正如我在其他应用程序中看到的那样.

uitableview ios qlpreviewcontroller 3dtouch

8
推荐指数
2
解决办法
2605
查看次数

MKMapview影响UINavigationBar和TabBar外观

我在UIView中有一个MKMapView.iOS7之前从未出现任何问题.UITabbar和UINavigationBars的颜色由UIAppearance协议设置.

出于某种原因,无论何时启动MKMapView,我的所有标签栏和导航栏都会重置,忽略我的外观类的barTintColor设置.UIAppearance的所有其他设置似乎仍然是title属性和barItem属性.只有barTintColor会消失.

还有一件事.这只发生在iPhone 4和iPhone4S上,而不是iPhone 5上.它也不会发生在模拟器上.根本不是iOS6中的问题.

我找不到重置的其他原因.我经历了几乎关于所有事情的评论并且无论如何都没有效果.

如果我删除MKMapView控件,则不重置颜色.如果我继续使用MKMapView呈现另一个完全不同的视图,颜色将重置.

我正在寻找还有什么可以检查的想法,什么样的设置或方法可能会导致这种行为.给我一些消除的东西,我被卡住了.

附加信息:

现在想到这可能是一个错误.我在ViewDidLoad中用一行代码将导航栏的颜色硬编码为任意颜色,只是为了看看发生了什么.

UINavigationBar *bar = self.navigationController.navigationBar;
[bar setBarTintColor = [UIColor GreenColor];
Run Code Online (Sandbox Code Playgroud)

我在下一行休息了一下.检查栏,颜色似乎设置.

在iPhone4或4S上,条形不会变为绿色.在iPhone5和模拟器上,条形变为绿色.

我发现的更多项目.颜色没有变化.可见性似乎是.然而,读取颜色和条形的alpha将返回1.0.

所以颜色是正确的.

半透明是肯定的.

Alpha是1.0.

然而,酒吧是完全清晰,没有颜色,没有色调.

我想我会将此正式归档为错误.我做了一个只有MKMapview的测试viewController.没有代码,没有代表,没有注释.提出代替我的适当控制器.同样的事情发生了.

我现在需要的是一种解决方法.我只是不知道有什么变化.当我检查导航栏的属性时,一切都是正确的.色调,半透明,条纹色调,alpha值.据我所知,事情应该按照预期显示.

谁能告诉我其他属性或方法可以使导航栏的背景完全透明?

iphone mkmapview ios uiappearance

7
推荐指数
1
解决办法
1996
查看次数

替换sizeWithFont:ForWidth:lineBreakMode:

我在iOS7中已经弃用了许多用于确定打印字符串布局以创建复杂pdf文档的方法.文档调用相同的方法来替换所有不推荐使用的sizeWithFont方法:

boundingRectWithSize:options:attributes:
Run Code Online (Sandbox Code Playgroud)

这很好,sizeWithFont:ConstrainedTosize:lineBreakMode但如果我只想让我的字符串在一行上怎么办?我不知道什么用于最大高度所以我没有一个矩形作为第一个参数的值移交.

这是我限制到给定大小时的情况.

CGFloat maxHeightAllowable = _maxHeight;
CGSize issueTitleMaxSize = CGSizeMake(_issueListTitleColWidth - (kColumnMargin *2), maxHeightAllowable);
NSDictionary *issueTitleAttributes = [NSDictionary dictionaryWithObjectsAndKeys:_bodyFont, NSFontAttributeName, nil];
CGRect issueTitleRect = CGRectIntegral([issueTitleText boundingRectWithSize:issueTitleMaxSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:issueTitleAttributes context:nil]);
CGSize issueTitleSize = issueTitleRect.size;
Run Code Online (Sandbox Code Playgroud)

如果我不知道maxHeight,或者实际上,一行的高度正是我想要找到的,我将如何使用相同的方法?

我明白为什么他们正在推动NSAttributed字符串和自动布局的兼容性,但为什么要弃用这些呢?在我的情况下,替换现在需要4或5个步骤,其中曾经是1或2.

根据T先生的建议,使用font的lineHeight属性,我将这些方法放在一个类别中,大大简化了我的替换.

#import "NSString+SizingForPDF.h"

@implementation NSString (SizingForPDF)

-(CGSize)integralSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)maxSize
{
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
    CGRect rect = CGRectIntegral([self boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil]);
    return rect.size;
}

-(CGSize)integralSizeWithFont:(UIFont *)font maxWidth:(CGFloat)maxWidth numberOfLines:(NSInteger)lines
{
    if (lines == 0) {
        lines = 1; …
Run Code Online (Sandbox Code Playgroud)

deprecated nsstring ios7

5
推荐指数
1
解决办法
7193
查看次数

viewWillTransitionToSize协调器忽略块

尝试游戏新的旋转方法,我需要知道设备是否正在旋转,以便推迟和取消旋转时不需要的动作.

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    _rotating = YES;

    [coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        _rotating = NO;
    }];
}
Run Code Online (Sandbox Code Playgroud)

看起来很直接,应该根据我对文档的解释工作,但显然没有.似乎_rotating被设置为YES并且永远不会被设置回NO.因此,似乎永远不会调用我的完成块.

rotation uiviewcontroller ios

4
推荐指数
1
解决办法
1285
查看次数

在Core Data中替换多对多关系中的实体

当我从一对多关系的一侧检索实体时,我从集合中创建一个可变数组,该数组是关系中的实体集合.我操纵,编辑或以其他方式更改这些实体,可能删除现有或添加新实体.通过更改后,我只需使用数组创建一个新集,然后将原始集替换为我创建的集,如下所示:

self.myOneSideEntity.theManySideEntitiesRelationship = [NSSet setWithArray:myNewArrayOfEntities];
Run Code Online (Sandbox Code Playgroud)

在我看来,更换套装可能不会删除旧成员.他们发生了什么?这是编辑相关对象集合的正确方法吗?我是否会留下任何类型的孤儿或违反这种技术的最佳做法?

我的关系在一侧设置了反向级联删除,在许多方面无效,反向关系不是可选的.

entity-relationship core-data ios

2
推荐指数
1
解决办法
884
查看次数

隐藏对象的NSLayoutConstraint仍然会覆盖备用约束

我只是第一次尝试在笔尖中使用Autolayout.看来我的情况是教科书情况,这NSLayoutConstraints将是完美的解决方案.

我有一个UITableviewCellUILabel它旁边的图像.图像根据底层数据的属性而变化,它可以改变大小,有时可以隐藏.我的目的是使标签与图像保持一定距离,并在隐藏图像时跨越整个单元格.

我相应地在标签上设置了约束:

  • 一个约束,后缘距图像前沿一定距离,高优先级但不是必需的.
  • 一个约束,后缘与超视图边缘设定距离,优先级低得多.
  • 适当的左侧和顶部限制,不限制标签的宽度.

即使图像被隐藏,标签仍会被第一个约束缩短.这是预期的行为吗?我通常会在运行时计算和更改标签的宽度,但这似乎是NSLayoutConstraints的用途.

当图像不可见时,如何让它忽略对图像的约束?

ios6 nslayoutconstraint

1
推荐指数
2
解决办法
1872
查看次数