Iphone 如何读取在故事板中创建的xcode UITextView的x、y位置
如何读取在故事板中创建的Iphone 如何读取在故事板中创建的xcode UITextView的x、y位置,iphone,ios,xcode,ipad,uitextview,Iphone,Ios,Xcode,Ipad,Uitextview,如何读取在故事板中创建的UITextView的x、y位置和宽度 在运行时,我需要通过编程在UITextBox的正下方创建其他对象? 所有运行时创建的对象都必须基于故事板的位置UITextView 我找不到答案。我尝试的代码(如下)返回0,0 在.h @interface ataglance_central_controller : UIViewController { IBOutlet UITextView *transmitter_box; } 单位:m enter code her
UITextView
的x、y位置和宽度
在运行时,我需要通过编程在UITextBox的正下方创建其他对象?
所有运行时创建的对象都必须基于故事板的位置UITextView
我找不到答案。我尝试的代码(如下)返回0,0
在.h
@interface ataglance_central_controller : UIViewController
{
IBOutlet UITextView *transmitter_box;
}
单位:m
enter code here
#import "ataglance_central_controller.h"
#import <CoreBluetooth/CoreBluetooth.h>
#import <QuartzCore/QuartzCore.h>
#import "TransferService.h"
@interface ataglance_central_controller () <CBCentralManagerDelegate, CBPeripheralDelegate>
{
UITextView* battery_status_textview;
}
@property (strong, nonatomic) IBOutlet UITextView *textview;
@property (strong, nonatomic) CBCentralManager *centralManager;
@property (strong, nonatomic) CBPeripheral *discoveredPeripheral;
@property (strong, nonatomic) NSMutableData *data;
@end
@implementation ataglance_central_controller
-(void)viewDidLoad
{
NSLog(@" ataglance_central_controller.m viewDidLoad. ");
[super viewDidLoad];
NSLog(@" x <<<<<<<<<<<<<<<<<<< b %f", transmitter_box.frame.origin.x );
NSLog(@" y <<<<<<<<<<<<<<<<<<< b %f", transmitter_box.frame.origin.y );
}
-(void)viewDidLayoutSubviews
{
NSLog(@" x viewDidLayoutSubviews %f", transmitter_box.frame.origin.x );
NSLog(@" y viewDidLayoutSubviews %f", transmitter_box.frame.origin.y );
}
在此处输入代码
#导入“ataglance\u central\u controller.h”
#进口
#进口
#导入“TransferService.h”
@中央控制器接口()
{
UITextView*电池状态textview;
}
@属性(强,非原子)IBOutlet UITextView*textview;
@属性(强,非原子)CBCentralManager*centralManager;
@性质(强,非原子)CBPeripheral*发现的Peripheral;
@属性(强,非原子)NSMutableData*数据;
@结束
@中央控制器的实现
-(无效)viewDidLoad
{
NSLog(@“ataglance_central_controller.m viewDidLoad”);
[超级视图下载];
NSLog(@“x该层位于UITextView
中,并填充其所有者
您要查找的是控件的frame
:transmitter\u-box.frame.origin.x
,transmitter\u-box.frame.origin.y
尝试在ViewDidLayoutSubview
中记录帧详细信息,而不是viewDidLoad
。如果您的
情节提要设置为使用“自动布局”子视图,以比您想象的更晚的时间定位
当然,这不应该阻止您在viewDidLoad中添加其他子视图,并使用自动布局约束相对于UITextView定位它们,而不是直接设置它们的框架。我不知道您的答案,幸运的是您已经找到了答案。但是,您似乎偏离了Objective-C命名约定
@interface ataglance_central_controller
应该更像
@interface MYAtAGlanceCentralController
类名应该以大写字母开头(并加前缀)我这样做了,但它仍然返回0,0。(上面更新的代码)另外,如果这很重要的话,它是一个文本视图而不是一个文本字段。真的吗?一个减号?为什么?@DouglasK.Bell你还应该检查你的TextView
是否已初始化,如果它没有从故事板正确链接,它可能不会被初始化。我想有人会减号,因为它有“textfield”而不是“UITextView”。但我认为应该有一个注释en更礼貌、更尊重。@DouglasK.Bell谢谢你的提示。是的,如果有人在没有留下原因的情况下给出一个负号,这是非常糟糕的,也是不具建设性的。完成。现在y是正确的,但x=270是错误的。ipad故事板(横向)传输器UITextView实际上是14,12(宽度=990高度=143)我纠正了x=270的问题,将声明从.m移到了.h,它们首先应该放在哪里。(我从Apple Dev的BTLE central/peripheral transfer获得了原始代码,它在.h和.m文件中都有@接口,这超出了我的洞察力。)很酷。我仍然建议使用NSLayoutConstraint
s来指定编程创建的UIView相对于UITextView的位置。同意。我当时很匆忙(开发进度很紧)。但是,我喜欢插入空格(下划线)字里行间是为了可读性,这样我就不会偏离英语的句法惯例——英语是一个经过调试的交流系统
@interface MYAtAGlanceCentralController