我已经将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需要在两个地方调用此函数.显然,第一个是用户点击不同的段时.我可以通过覆盖我SegmentedControlStyled的addTarget功能和挂钩UIControlEventValueChanged事件来自主地做到这一点.updateStyle需要调用的第二个位置是在将 a SegmentedControlStyled添加到其superview之后.你可能会问,"你为什么要这样称呼它而不是某个地方init?".好吧,从我的观察来看,在它被附加到视图之前调用它是没有效果的.因此,需要像这样编写代码:
SegmentedControlStyled* seg = [[SegmentedControlStyled alloc] …Run Code Online (Sandbox Code Playgroud) 当用户点击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) 我难以在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的条形变得不那么半透明,但效果仍然太强烈.如何在不使其完全不透明的情况下进一步降低半透明度?
我正在尝试创建一个像这样的尖按钮:

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

我认为增加水平边界半径会使它变得尖锐,但它所做的一切都会使圆度变长。
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) 我有一个只能垂直滚动的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:
我想iOS 7约定是让表格单元格分隔符从文本开始的地方开始.我编写了以下代码来执行此操作:
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.separatorInset = 50.0;
}
Run Code Online (Sandbox Code Playgroud)
问题是我的章节标题也被转移了相同的数量.如何独立于单元格分隔符控制节标题的缩进?我希望部分标题保持对齐.

我需要将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) 在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) 我有一个声明如下的函数:
- (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*的指针,没有明确的所有权.
当使用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中,但我仍然得到相同的错误网页.
ios ×8
cocoa-touch ×7
ios7 ×3
iphone ×3
css ×2
uitableview ×2
box-api ×1
ipad ×1
iphone-5 ×1
matrix ×1
oauth-2.0 ×1
objective-c ×1
overflow ×1
pointers ×1
properties ×1
scroll ×1
uiview ×1