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