Phi*_*ert 5 objective-c xib uiview nib ios
我有一个严重的问题,一个由XIB文件定义的视图.这是一个简单的数字输入板,按钮为0-9:

问题是在极少数情况下(如上面的屏幕截图所示),缺少按钮标签.它并不总是相同的标签(在上面的示例中,缺少"0").通常关闭视图并重新创建它可以解决问题.
XIB文件的按钮附加到视图中的UIButton控件.视图构造如下:
@property (nonatomic,strong) IBOutlet UIButton *button0;
// etc...
@property (nonatomic,strong) IBOutlet UIButton *button9;
- (id)initWithFrame:(CGRect)frame
{
self = [[UINib nibWithNibName:[[self class] description] bundle:nil]
instantiateWithOwner:nil
options:nil
][0];
if (self)
{
self.frame = frame;
// ...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
没有涉及控制器,我也不想这样.
该视图是使用以下代码创建的:
CustomView *view = [[CustomView alloc] initWithFrame:frame];
Run Code Online (Sandbox Code Playgroud)
当问题发生时(通常不是随机的),用户点击带有缺失标签的按钮,按钮的titleLabel.text属性为nil:
- (IBAction) numberButtonPressed:(UIButton *)button
{
NSLog("button label = %@",button.titleLabel.text);
// output: button label = (null)
}
Run Code Online (Sandbox Code Playgroud)
XIB文件的XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment defaultVersion="1536" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1" customClass="AmountEntryView">
<rect key="frame" x="0.0" y="0.0" width="242" height="345"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="3" customClass="UIButton">
<rect key="frame" x="0.0" y="56" width="80" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.80112777219999998" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="40"/>
<state key="normal" title="7">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="numberButtonPressed:" destination="1" eventType="touchUpInside" id="142"/>
</connections>
</button>
<!-- ALL OTHER BUTTONS (omitted, as they are identical) -->
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="0.00" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="107">
<rect key="frame" x="0.0" y="0.0" width="242" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.91557459679999997" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="32"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.72580645160000001" alpha="1" colorSpace="calibratedWhite"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="button0" destination="86" id="108"/>
<outlet property="button1" destination="58" id="109"/>
<outlet property="button2" destination="60" id="110"/>
<outlet property="button3" destination="59" id="111"/>
<outlet property="button4" destination="30" id="112"/>
<outlet property="button5" destination="32" id="113"/>
<outlet property="button6" destination="31" id="114"/>
<outlet property="button7" destination="3" id="115"/>
<outlet property="button8" destination="19" id="116"/>
<outlet property="button9" destination="8" id="117"/>
<outlet property="buttonBack" destination="105" id="118"/>
<outlet property="buttonDone" destination="106" id="119"/>
<outlet property="buttonDot" destination="94" id="120"/>
<outlet property="labelAmount" destination="107" id="133"/>
</connections>
</view>
</objects>
</document>
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会出现这个问题,我在这里或网上的任何其他地方都找不到类似的报道.
设置标签时使用:
\n\n[self.button0 setTitle:@"0" forState:UIControlStateNormal];\nRun Code Online (Sandbox Code Playgroud)\n\n不是:
\n\nself.button0.titleLabel.text = @"0";\nRun Code Online (Sandbox Code Playgroud)\n\n此方法不会保留标题集,即设备旋转等后标题会消失。
\n\n其他可能的原因:
\n\n减小 UIButton 中的字体大小。如果用户使用\n设置来使用较大的动态字体大小,则文本可能会变得\n较大而不适合。
在没有 XIB 的情况下在代码中设置 UIView。
边注: \n您还可以通过标签引用按钮,那么您的代码将变得更简单,因为您不必\xc2\xb4单独连接每个按钮。
\n| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |