我想为我使用自定义背景UITextFields.这工作正常,除了我必须使用UITextBorderStyleNone它使它看起来漂亮的事实.这会强制文本粘在左边而不进行任何填充.
我可以手动设置填充,使其看起来类似于UITextBorderStyleRoundedRect使用我的自定义背景图像吗?
我可以使用类类别来覆盖已使用类别实现的方法吗?像这样:
1)原始方法
-(BOOL) method {
return true;
}
Run Code Online (Sandbox Code Playgroud)
2)覆盖方法
-(BOOL) method {
NSLog(@"error?");
return true;
}
Run Code Online (Sandbox Code Playgroud)
这会起作用,还是非法的?
我正在做一个项目.我有很多UITableViews设置为清晰的颜色.他们的观点背景颜色设置为我的自定义颜色,iPhone上的一切都很好.
这个问题出现在iPad上!我几乎尝试了所有东西,但我UITableView的颜色是白色.
我检查了其他主题,例如:UITableView backgroundColor在iPad上总是灰色,但没有任何效果.另外,我的问题不是灰色,它像雪一样白!
可能是什么原因?
我有一个库,它开始在XCode 4.4下抛出几个链接器警告.警告是"ld:warning:instance方法'methodName:'在类别中来自类中的覆盖方法"
该框架仍然可以正常工作,我认为编写它的公司将在下一个版本中纠正这个问题,但暂时这些警告非常烦人.有没有办法在不禁用所有链接器警告的情况下关闭它们?
我需要使用类别覆盖方法.我也意识到这样做的危险(这是另一个类中的私有类,没有人会编写另一个重写类别方法,所以没有保证未定义的行为).我已经看到了很多类似的问题,但它们都解决了使用类似这样的事情来抑制编译器警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
// do your override
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)
然而,这仍然留下链接器警告.在Xcode 4.6中,是否有可能为我认为安全的特定覆盖摆脱它?
这是一个示例问题的GitHub示例项目.
我故意使用类别来覆盖我知道已经在主类上实现的方法.我知道这通常是设计薄弱的标志 - 拜托,没有讲座 - 但在这种情况下我不能干净地继承.我知道调酒也可能是一种选择.
但是现在,我怎么能抑制这个警告呢?llvm抛出一个编译器警告我可以禁用(diagnostic ignored "-Wobjc-protocol-method-implementation").但随后链接器也抱怨.
这提出了一个类似的问题,但正在寻找一个不同的答案.如何告诉链接器不要抱怨?
谢谢.
我有一些代码[NSBundle mainBundle]在某些时候调用,主要是读取/设置首选项.当我对方法进行单元测试时,测试失败,因为测试的mainBundle不包含该文件.
这是一个众所周知的问题,Apple不会修复,因为他们认为这不是一个bug:
他们回复的要点是XCTest通过返回它自己的主bundle而不是测试目标的bundle来正常工作.
以前我们的代码库是用一个类别覆盖NSBundle的+mainBundle类的方法来解决这个问题.但这很危险,因为覆盖类别中现有方法的行为是未定义的.
如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(或甚至是超类)上的另一个类别中的方法相同,则关于在哪个方法实现中使用哪个方法实现的行为是未定义的.运行.
实际上Xcode警告你:
类别正在实施一种方法,该方法也将由其主要类实现
那么,解决这个问题的正确方法是什么?
ios ×4
objective-c ×4
linker ×2
categories ×1
clang ×1
frameworks ×1
ipad ×1
nsbundle ×1
ocmock ×1
padding ×1
uitableview ×1
uitextfield ×1
unit-testing ×1
warnings ×1
xcode ×1
xctest ×1