小编Pwn*_*ner的帖子

UIView如何在添加到超级视图时获得回调?

问题

我已经将UIView子类化了.将此子类的对象添加到其superview后,它需要自动运行一些代码.如何挂钩此事件以运行我的代码?

为什么我需要它

UISegmentedControl的所选分段的背景众所周知难以设计.我能找到的最好的解决方案是做这个黑客:

#import "SegmentedControlStyled.h"

@implementation SegmentedControlStyled

- (void) updateStyle
{
    for (NSUInteger i = 0; i < [self.subviews count]; i++) {
        if ([[self.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[self.subviews objectAtIndex:i] isSelected]) {
            [[self.subviews objectAtIndex:i] setTintColor:[UIColor colorWithWhite:0.7 alpha:1.0]];
        }
        if ([[self.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[self.subviews objectAtIndex:i] isSelected]) {
            [[self.subviews objectAtIndex:i] setTintColor:[UIColor colorWithWhite:0.9 alpha:1.0]];
        }
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

updateStyle需要在两个地方调用此函数.显然,第一个是用户点击不同的段时.我可以通过覆盖我SegmentedControlStyledaddTarget功能和挂钩UIControlEventValueChanged事件来自主地做到这一点.updateStyle需要调用的第二个位置是在将 a SegmentedControlStyled添加到其superview之后.你可能会问,"你为什么要这样称呼它而不是某个地方init?".好吧,从我的观察来看,在它被附加到视图之前调用它是没有效果的.因此,需要像这样编写代码:

SegmentedControlStyled* seg = [[SegmentedControlStyled alloc] …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch uisegmentedcontrol uiview ios

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

如何计算iPad上模态视图的底部偏移量?

当用户点击UITextField时,键盘会出现.我向上滚动UITextField以便位于键盘上方.这在iPhone上工作正常:

在此输入图像描述

- (void) someWhere
{
    [[NSNotificationCenter defaultCenter] 
        addObserver:self
        selector:@selector(onKeyboardShow:)
        name:UIKeyboardWillShowNotification
        object:nil];
}

- (void) onKeyboardShow:(NSNotification *)notification
{
    CGRect keyboardRect = [[[notification userInfo] 
        objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue
    ];

    if (keyboardRect.size.height >= IPAD_KEYBOARD_PORTRAIT_HEIGHT) {
        self.containerView.y = self.containerView.y - keyboardRect.size.width;
    } else {
        self.containerView.y = self.containerView.y - keyboardRect.size.height;        
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,它在iPad上被破坏了.在iPad上,模态视图控制器可以显示为仅占用屏幕一部分的工作表.您可以看到最后一个UITextField与iPad上的键盘之间存在差距.

在此输入图像描述

UINavigationController* nav = [[UINavigationController alloc]
    initWithRootViewController:someRootViewController];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:nav animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

我需要从屏幕底部检测模态视图的偏移量,并将其添加到UITextField的Y坐标.这将使UITextField与键盘顶部齐平.通过一些逆向工程,我通过遍历未记录的视图层次结构得到了模态视图的框架:

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    // describe is a category function on UIView that prints out the frame
    [self.viewController.view.superview.superview.superview.superview …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch ipad modalviewcontroller ios

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

如何巩固iPhone 5S和5之间导航栏的半透明度?

我难以在iPhone 5和5S之间整合UINavigationBar的barTintColor.我的两部手机都在iOS 7上.在下面的截图中,顶部是5S,底部是5. iPhone 5S显示极其半透明的效果,而iPhone 5显示更微妙的效果.iPhone 5的导航栏后面只能看到非常暗的物体.

[[UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil]
    setBarTintColor:[UIColor 
        colorWithRed:46.0 / 255.0 
        green:160.0 / 255.0 
        blue:152.0 / 255.0 
        alpha:0.8
    ]
];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我希望这两款手机看起来都像iPhone 5.如果我要将barTintColor的alpha增加到1.0,iPhone 5的导航栏就会变得完全不透明.这是预期的结果.虽然iPhone 5S的条形变得不那么半透明,但效果仍然太强烈.如何在不使其完全不透明的情况下进一步降低半透明度?

iphone cocoa-touch ios iphone-5 ios7

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

如何使用 CSS 使 div 的一侧变尖?

我正在尝试创建一个像这样的尖按钮:

尖按钮

到目前为止,我只能做到这一点:

圆形按钮

我认为增加水平边界半径会使它变得尖锐,但它所做的一切都会使圆度变长。

HTML

<a class="button">Back</a>
Run Code Online (Sandbox Code Playgroud)

CSS

.button {
    display: inline-block;
    height: 3em;
    padding: 0 0.7em 0 1.4em;
    border: 0.1em solid black;
    border-radius: 3em 0.4em 0.4em 3em / 1.5em 0.4em 0.4em 1.5em;
    background: -moz-linear-gradient(
        top,
        #fff,
        #ccc
    );
}
Run Code Online (Sandbox Code Playgroud)

css ios

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

如何在不裁剪overflow-x的情况下创建滚动DIV?

我有一个只能垂直滚动的DIV.我想在这个DIV内部有一个元素水平溢出而不被裁剪.这是期望的效果:

在此输入图像描述

我想如果我只指定overflow-y:scroll它,它只会裁剪垂直溢出.但是,我错了,这才是真正发生的事情:

在此输入图像描述

CSS:

ol {
    border: 1px solid red;
    overflow-y: scroll;
    height: 20em;
    width: 7em;
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle:

http://jsfiddle.net/u6d6W/1/

css scroll overflow

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

如何在iOS 7中控制表格节标题的缩进?

我想iOS 7约定是让表格单元格分隔符从文本开始的地方开始.我编写了以下代码来执行此操作:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.separatorInset = 50.0;
}
Run Code Online (Sandbox Code Playgroud)

问题是我的章节标题也被转移了相同的数量.如何独立于单元格分隔符控制节标题的缩进?我希望部分标题保持对齐.

在此输入图像描述

iphone cocoa-touch uitableview ios ios7

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

如何在没有变换相互冲突的情况下翻译和缩放视图?

我需要将UIView从屏幕中心翻译并缩放到右上角.

 _____________________________
|                            |
|                            |
|         _________          |
|        |         |         |    START
|        |         |         |
|        |_________|         |
|                            |
|                            |
|____________________________|


 _____________________________
|                       __   |
|                      |__|  |
|                            |
|                            |    END
|                            |
|                            |
|                            |
|                            |
|____________________________|
Run Code Online (Sandbox Code Playgroud)

我验证了我对比例和翻译的个人计算是准确的.但是一旦它们组合在一起,它们就会相互冲突.以下代码使视图最终太靠近中心.

CGFloat finalPadding = 10.0f;
CGFloat finalScale = 46.0f / 170.0f;
CGFloat finalX = self.view.frame.size.width 
    - self.platformProgressView.frame.size.width * finalScale 
    - finalPadding;
CGFloat finalY = finalPadding;
CGFloat deltaX = finalX - self.platformProgressView.frame.origin.x;
CGFloat deltaY …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch matrix linear-algebra ios

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

如何滚动到iOS 7中UITableView的顶部

在iOS 7中,我使用以下代码滚动到我的UITableView的顶部.您必须考虑半透明状态栏和导航栏的重叠.

[tableView 
    setContentOffset:CGPointMake(
        0.0, 
        -tableViewController.topLayoutGuide.length
    ) 
    animated:YES
];
Run Code Online (Sandbox Code Playgroud)

此工作仅您第一次调用它时起作用.在你第一次调用它时,我的表滚动得比它应该的更远,显示出很多空白区域.此外,UIRefreshControl似乎已冻结.你必须轻轻推动桌子才能让它恢复到真正的顶部.之后,您可以根据需要多次调用此代码,它的行为与您期望的一样.

在此输入图像描述 在此输入图像描述

我尝试过其他方法,但都有问题.iOS 6的方式在第一次调用时表现得很奇怪.虽然它在后续调用中没有大量跳跃,但它们不正确,因为它滚动到表格顶部以下64.0点,因为我们忘记了状态和导航栏.

[table setContentOffset:CGPointZero animated:YES];
Run Code Online (Sandbox Code Playgroud)

我也尝试滚动到第一个单元格,但它不会在一次调用中滚动到最顶层.每次调用它时,它只会向上滚动一页.

[tableView 
    scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
    atScrollPosition:UITableViewScrollPositionTop 
    animated:YES
];
Run Code Online (Sandbox Code Playgroud)

cocoa-touch uitableview ios ios7

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

如何在Objective-C中声明双指针属性?

我有一个声明如下的函数:

- (void)loadWithCompletion:(MyCompletion)completion error:(NSError**)error;
Run Code Online (Sandbox Code Playgroud)

该函数采用指向NSError的双指针,因此我可以向调用者报告错误.完成(可能是错误)将在调用函数后的某个时间发生.我需要将NSError**存储为属性,以便在上述时间过后我可以使用它.

@property(nonatomic, assign) NSError** error;
Run Code Online (Sandbox Code Playgroud)

此属性声明给出了错误:

指向非const类型NSError*的指针,没有明确的所有权.

pointers properties objective-c

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

尝试登录Box时,为什么会出现重定向URI不匹配的问题?

当使用Box SDK for iOS进行OAuth时,我会看到一个包含此错误的网页:

在此输入图像描述

错误:redirect_uri_mismatch

response_type = code redirect_uri = boxsdk-our4iypzazstfpx8j70e8tlc3eyn9c4l:// boxsdkoauth2redirect state = ok client_id = our4iypzazstfpx8j70e8tlc3eyn9c4l

我使用了他们建议的代码:

[self
    presentViewController:[[BoxAuthorizationViewController alloc]
        initWithAuthorizationURL:[[BoxSDK sharedSDK].OAuth2Session authorizeURL]
        redirectURI:nil
    ]
    animated:YES
    completion:nil
];
Run Code Online (Sandbox Code Playgroud)

我的客户端ID和客户端密钥在此之前设置.在我的info.plist文件中,我将boxsdk-our4iypzazstfpx8j70e8tlc3eyn9c4l作为URL方案.我无法遵循的唯一指令是:

注意:在Box上设置服务时,请将OAuth2 reditrect URI留空.发布OAuth2调用时,SDK将提供自定义重定向URI; 这样做要求在服务设置中不设置重定向URI.

当我尝试将重定向URI留空并将表单保存在开发人员控制台中时,我收到此错误:

OAuth2重定向网址必须指定有效的网址,且不得为http://

所以我被迫输入一些东西.我输入了" https://mydomain.com "(我的真实域名).我修改了iOS代码以将该URI传递到BoxAuthorizationViewController中,但我仍然得到相同的错误网页.

cocoa-touch ios oauth-2.0 box-api

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