【发布时间】:2014-10-01 03:00:03
【问题描述】:
我对由 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;
}
没有涉及控制器,我也不希望这样。
视图是用这样的代码创建的:
CustomView *view = [[CustomView alloc] initWithFrame:frame];
当问题发生时(不经常和随机),并且用户点击缺少标签的按钮,按钮的 titleLabel.text 属性为nil:
- (IBAction) numberButtonPressed:(UIButton *)button
{
NSLog("button label = %@",button.titleLabel.text);
// output: button label = (null)
}
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>
我不知道为什么会出现此问题,并且我在此处或网络上的其他任何地方都找不到类似的报告。
【问题讨论】:
-
您在代码中的任何地方都可以访问您的 button0,如果您可以分享您的代码,我可以更好地为您提供指导。
-
调试日志中有任何内容?
-
调试日志中没有任何内容,并且从不直接在代码中访问按钮。失去标签的按钮并不总是同一个按钮。
-
您能以 XML 格式在此处发布您的 XIB 以供我们自己试用吗?
-
标签是否丢失,因为没有文本,它的
hidden设置为true,或者它的框架为零?
标签: ios objective-c uiview xib nib