我正在我正在处理的应用程序中制作化学计算器部分,我无法获取数据而无法获取正确填充屏幕的信息。有一个次要的问题,对齐,如果有人可以帮助我,我会非常感激,但这不是这个问题的主要焦点 - 我将为它做一个专门的主题。
所以我会回顾我想做的事情以及我尝试过的事情。我要做的是制作化学计算器,根据选择的方程式,修改UIStepper max / min.Value以包括该等式的所有可能的推导,以及显示/隐藏的某些UILabel和UITextField。 / p>
我已经确认我从MasterViewController传递了数据,因为我已将数据设置为名为_equation的NSString,并成功使用_equation修改viewDidLoad中self.title下的DetailViewController的标题。
我尝试在viewDidLoad下的if / if else嵌套下适当地放置和初始化所有UIStepper属性(它还将_equationName可能值量化为整数(eqNum),以便可以在switch语句中使用)。我也试过在ViewDidLoad下放置UITextField隐藏属性,但没有用。
所以不用多说了,让我们来看看代码吧。我已经将代码截断为一个等式,这样你就可以更容易地看到这里发生了什么 - 请注意,它嵌套在计算按钮的IBAction下:
// Take _equationName quantization and use it in a switch case to determine the formula that IBAction will use:
if (dflt)
{
switch (eqNum)
{
case 1:
if ((stepper.value = 1))
{
// Change deriv_units appropriately:
deriv_units.text = @"Energy (Joules)";
// This is a Planck's constant calculation, we hide the second variable as the constant
// is stored:
value2.hidden = YES;
value2_type.hidden = YES;
// Now we set up the parameters of the first entry variable:
value1_type.text = @"Frequency (in Hz)";
double frequency = [value1.text doubleValue];
double Planck = 6.626069e-34;
double energy = Planck * frequency;
// Now we set up the return field to return results:
NSString* resultIntermediate = [NSString stringWithFormat:@"%f", energy];
result.text = resultIntermediate;
units.text = @"J";
}
以及viewDidLoad下的后续代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self configureView];
self.title = _equationName;
int eqNum;
if ((_equationName = @"Energy-Frequency Relation"))
{
eqNum = 1;
// Set stepper bounds for derivation:
[stepper setMinimumValue:1];
[stepper setMaximumValue:3];
self.stepper.stepValue = 1;
self.stepper.wraps = NO;
self.stepper.autorepeat = NO;
self.stepper.continuous = YES;
// This is primarily a two-variable equation, so hide UITextView and UILabel #3:
value3.hidden = YES;
value3_type.hidden = YES;
}
(对任何认识到这一点的人的道具 - 这是普朗克的关系!:D)
以下是GUI应该是什么样子(如故事板中所示):
以下是iOS模拟器中的内容:
注意错位问题,这不是这里的主要问题。 另请注意,现在,方程参数的switch语句位于 if 树下,该树检查dflt(分配给UISwitch的布尔变量)是否为双精度计算返回true。但是,在将开关切换为ON时,问题仍未解决。
这是一个更完整的解释:
- value#.text是从上到下在三个UITextField之一中输入的数字。
- value#_type是要在相应的UILabel中显示的文本。
- deriv_units是标记为“Derivation Units”的UILabel,用于显示使用UIStepper选择了哪个方程派生。
- 在底部:最右边的UILabel是结果标签,而最左边的是单位标签。
非常感谢任何能够帮助这位初级开发人员正确编程正义的人。
答案 0 :(得分:0)
关于您的对齐问题:看起来您正在为4英寸屏幕创建故事板,同时在3.5英寸屏幕上运行它。在右下方的故事板中有一些小按钮,其中一个允许您在4英寸或3.5英寸显示屏之间即时更改。
您是否确定您的控件已连接到您的代码?
答案 1 :(得分:0)
- (void) viewDidAppear: (BOOL) animated{
[super viewDidAppear: animated];
// some rude NSAsserts, but let's be sure
NSAssert(value1_type != nil, @"Your control element is nil, it might not be hooked up");
// you should now see this text in the textfield
value1_type.text = @"Frequency (in Hz)";
NSAssert(result != nil, @"Your control element is nil, it might not be hooked up");
result.text = @"some test text";
NSAssert(units != nil, @"Your control element is nil, it might not be hooked up");
units.text = @"J";
}