小编Dar*_*ren的帖子

在 iPad 上运行的 iPhone 应用程序无法识别 UIScreenEdgePanGestureRecognizer

我有一个仅限 iPhone 的应用程序,它使用 UIScreenEdgePanGestureRecognizer 在 UINavigationController 中实现自定义交互式转换。手势识别器在 UINavigationController 子类的 viewDidLoad 中创建并添加如下:

UIScreenEdgePanGestureRecognizer* edgeRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
edgeRecognizer.edges = UIRectEdgeLeft;
[self.view addGestureRecognizer:edgeRecognizer];
Run Code Online (Sandbox Code Playgroud)

当应用程序在 iPad 上运行时,当我尝试滑动以从导航堆栈中弹出视图控制器时,应用程序中没有任何反应,如果我在应用程序窗口所在位置的左侧启动手势,我会得到以下控制台输出:

_UIApplicationHandleEventFromQueueEvent、_windowServerHitTestWindow 中出现意外的 nil 窗口:;层=>

有谁知道这个问题的原因以及我如何/是否可以解决这个问题?到目前为止,我在文档中找不到任何表明边缘平移手势不应在兼容模式下运行的内容。我正在 iOS 8 中进行测试。

该手势在模拟器中有效,但在设备上无效。

uinavigationcontroller uigesturerecognizer ios

6
推荐指数
1
解决办法
759
查看次数

UIScrollView 的内容偏移量被重置

我已经为 UIScrollView 的问题苦苦挣扎了很长时间。

我有一个UIScrollVIew包含 aUITextView作为子视图。当我选择文本视图时,会弹出键盘。我想调整文本视图的大小以完全适合可用空间,并滚动滚动视图,以便文本视图恰好位于可见空间中(不被键盘隐藏)。

当键盘出现时,我调用一个方法来计算文本视图的适当大小,然后执行以下代码:

[UIView animateWithDuration:0.3 
                 animations:^
 { 
     self.textView.frame = frame;
 }  
 ];

[self.scrollView setContentOffset:CGPointMake(0,frame.origin.y) animated:YES];
Run Code Online (Sandbox Code Playgroud)

(这里的框架是文本视图的适当框架)。

不幸的是,滚动视图并不总是滚动到正确的位置,特别是当我选择文本视图时它已经处于非零垂直内容偏移处。我知道我设置的内容偏移量是正确的。

经过大量测试,我终于意识到发生的事情是动画完成后,滚动视图再次自动滚动。

这段代码确实有效:

UIView animateWithDuration:0.3 
                 animations:^
 { 
     self.textView.frame = frame;
 }
 completion:^(BOOL finished) {
     [self.scrollView setContentOffset:CGPointMake(0, frame.origin.y) animated:YES];
 }
 ];
Run Code Online (Sandbox Code Playgroud)

但这看起来很奇怪,因为滚动视图滚动到错误的位置,然后滚动到正确的位置。

有谁知道当文本视图框架完成其动画时如何防止滚动视图更改其内容偏移量?

我正在使用 iOS 5.0 进行测试。


这是我发现有效的解决方案。我仍然不完全明白发生了什么,可能与我的弹簧和支柱的设置方式有关。基本上,我将滚动视图内容大小缩小了与文本视图缩小相同的量。

- (void)keyboardDidShow:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];

    // Get the height of the keyboard
    CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    kbRect = [self.view convertRect:kbRect fromView:nil];
    CGSize kbSize = kbRect.size; …
Run Code Online (Sandbox Code Playgroud)

uiscrollview ios

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

NSPredicate过滤掉子类结果

我有两个班,公司和MyCompany.MyCompany是Company的子类,Company是NSManagedObject的子类.我正在尝试为NSFetchRequest编写谓词,该谓词将返回类Company的结果,但过滤掉MyCompany对象.

我尝试过以下内容(建议来自/sf/answers/564615481/):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"class != %@",NSStringFromClass([myCompany class])];
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

'keypath class not found in entity <NSSQLEntity CKCompany id=1>'
Run Code Online (Sandbox Code Playgroud)

我也试过(建议从这里/sf/answers/818578841/,我知道我真的不想SELF isKindOfClass,但我只是用与答案中给出的完全相同的命令进行测试):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [myCompany class];
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

'Unknown/unsupported comparison predicate operator type'
Run Code Online (Sandbox Code Playgroud)

如何编写谓词来实现我想要的?我支持iOS 5及更高版本.

nspredicate nsfetchrequest ios ios5

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

UIWebView无法正确加载响应式网页

我正在尝试将响应式网页加载到UIWebview中,使用我的UIViewController的viewDidLoad方法中的以下代码:

NSURL *url = [NSURL URLWithString:self.webViewURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
Run Code Online (Sandbox Code Playgroud)

它不是根据UIWebView的帧大小加载网页的方式,而是将UIWebView的UIScrollView contentSize设置为一些看似任意的大小(大于我的Web视图框架大小)并加载响应式网页.对于那个大小的框架.

如果我尝试加载我在Safari中使用的网址,它会根据浏览器窗口大小正确重新排列.

我已经尝试将scalesPageToFit属性设置为YES,虽然我实际上并不想缩放页面,但让它的行为与Web视图框架相对应.

有没有人对于发生了什么以及如何解决它有任何想法?

uiwebview ios ios7

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

设置UIView缩放变换而不影响其他变换

我有一个UIView,我在触摸时缩小,并在触摸结束或取消时缩小.

我一直在扩展这样的观点

缩小:

CGAffineTransform transform = CGAffineTransformMakeScale(0.95, 0.95);
self.transform = transform;
Run Code Online (Sandbox Code Playgroud)

放大:

CGAffineTransform transform = CGAffineTransformMakeScale(1.0, 1.0);
self.transform = transform;
Run Code Online (Sandbox Code Playgroud)

这不会保留任何其他变换.我知道我可以用它来保存旧的变换:

缩小:

CGAffineTransform transform = CGAffineTransformScale(self.transform, 0.95, 0.95);
self.transform = transform;
Run Code Online (Sandbox Code Playgroud)

放大:

CGAffineTransform transform = CGAffineTransformScale(self.transform, 1.0, 1.0);
self.transform = transform;
Run Code Online (Sandbox Code Playgroud)

但是,当然这里扩大规模没有影响 - 此外还有可能应用累积缩小动画.基本上我想要一种绝对应用比例变换而不影响任何其他变换的方法.有没有办法做到这一点?我不认为使用1.0/0.95作为放大因子,因为视图可能在取消或结束之前接收两次触摸.

我想我问这个问题同样的事情:只将CGAffineTransform的scale组件应用到UIView,但我不认为这里的答案对我有用.

我的目标是iOS 7及更高版本.

core-graphics uiview quartz-2d ios

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

Mac - 用于在Xcode,终端,Safari,Firefox中跳过选项卡的键盘快捷键

我在Mountain Lion上运行Xcode 4.4.

是否有用于在窗口中打开选项卡循环的键盘快捷键?

我知道COMMAND+ `循环通过Xcode窗口,但我想循环浏览标签.

这有键盘快捷键吗?

macos terminal xcode tabs

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

preferredInterfaceOrientationForPresentation必须返回支持的接口方向(iOS 6)

我的应用程序窗口的根视图控制器是一个子类UINavigationController.我已将此代码添加到类中:

- (BOOL)shouldAutorotate
{
    return [self.topViewController shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.topViewController preferredInterfaceOrientationForPresentation];
}
Run Code Online (Sandbox Code Playgroud)

在我的根UIViewController中,我添加了以下代码:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}
Run Code Online (Sandbox Code Playgroud)

当设备在此视图控制器上旋转到横向时,我会呈现模态视图控制器.当设备旋转回肖像时,我应该关闭模态视图,但是当我这样做时,我收到以下错误:

'preferredInterfaceOrientationForPresentation must return a supported interface orientation!'
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误?


我尝试从根UIViewController中的shouldAutorotate返回YES,现在我收到错误'支持的方向与应用程序没有共同的方向,并且shouldAutorotate返回YES'.这对我来说毫无意义,因为UIInterfaceOrientationPortrait是应用程序支持的方向之一.

uiviewcontroller ios auto-rotation ios6

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

UITextField键盘:未输入文本时启用完成按钮

我的应用程序中有一个UITextField.当用户选择它时,键盘会显示一个完成按钮.按完成按钮即可关闭键盘.但完成按钮仅在用户输入文本后启用.我希望用户可以选择在不输入文本的情况下解除键盘.是否可以在输入文本之前启用完成按钮?

uitextfield uikeyboard ios

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

Objective-C编码样式 - 文件顶部的#import或#define

我对Objective C有一个通用的编码风格问题.

当我在文件中有#define时,我将它直接放在#import代码行下面和@implementation代码行之上:

#import "MyLibrary.h"

#define myConstant 99

@implementation MyClass
Run Code Online (Sandbox Code Playgroud)

这是标准风格,还是有一个标准风格的地方来定义?

objective-c

3
推荐指数
1
解决办法
521
查看次数

使用自定义图标在jQuery Mobile中创建按钮

我正在为客户端开发一个应用程序,我正在尝试创建一个带有完全自定义图标的按钮.图标为30px x 30px,中间透明.

我几乎已经使用这个css代码实现了我想要的东西:

/* info button override */
.ui-icon-info-page {
    background: url(images/G_help_icon_round.png) 50% 50% no-repeat;
    background-size: 30px 30px;
    background-color: black;
}
Run Code Online (Sandbox Code Playgroud)

但是图标内部出现了一个薄的黑色圆圈,图标图像似乎也被切断了:

在此输入图像描述

我想删除此圈并阻止图标?从被切断.此外,我希望问号是透明而不是黑色,以显示下方导航栏的图像.如果我尝试将背景颜色设置为透明,则按钮显示为全白:

在此输入图像描述

我怎样才能做到这一点?

更新:

我尝试应用此代码:

/* info button override */
.ui-icon-info-page {
    background: url(help.png) 50% 50% no-repeat;
    background-size: 30px 30px;
    width: 30px;
    height: 30px;
    margin-top: -15px !important;
    box-shadow: none;
    -webkit-box-shadow: none;
}
Run Code Online (Sandbox Code Playgroud)

得到了这个结果:

在此输入图像描述

我可以通过调整顶部和左边距来移动图标,但是它的边​​缘在黑色圆圈的中心框架外被切除:

在此输入图像描述

更新2:

这是我正在使用的按钮(请注意,它在这里是不可见的,因为它是白色背景上的白色按钮):

在此输入图像描述

这是我用来加载按钮的html代码:

<div data-role="header" data-position="fixed"> 
            <div><img border="0" src="images/G_iphone_navbar_logo.png" style="display:inline;"/> </div>          
            <a href="index.html" data-icon="refresh" class="ui-btn-left" data-transition="fade" data-iconpos="notext" data-theme="a"></a>
            <a href="info.html" data-icon="info-page" class="ui-btn-right" data-transition="flip" data-iconpos="notext" …
Run Code Online (Sandbox Code Playgroud)

jquery-mobile

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