2013-05-20 38 views
0

如何讀取故事板中創建的UITextView的x,y位置和寬度?如何讀取故事板中創建的xcode的x,y位置UITextView

在運行時,我需要以編程方式在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); 


} 

日誌

2013-05-21 12:12:10.708 DW x2[447:c07] ataglance_central_controller.m viewDidLoad.  
2013-05-21 12:12:10.709 DW x2[447:c07] x <<<<<<<<<<<<<<<<<<< b 0.000000 
2013-05-21 12:12:10.709 DW x2[447:c07] y <<<<<<<<<<<<<<<<<<< b 0.000000 
2013-05-21 12:12:10.712 DW x2[447:c07] Battery status is unknown. 
2013-05-21 12:12:10.743 DW x2[447:c07] x viewDidLayoutSubviews 270.000000 
2013-05-21 12:12:10.744 DW x2[447:c07] y viewDidLayoutSubviews 12.000000 

回答

0

嘗試在viewDidLayoutSubviews而不是viewDidLoad中記錄框架詳細信息。如果您 故事板是設置爲使用自動版式子視圖得到後定位比你想象的......

當然,從加在viewDidLoad中的其他子視圖,並使用自動佈局的限制,而相對定位他們的UITextView的這不應該阻止你比直接設置他們的框架。

+0

完成。現在y是正確的,但x = 270是錯誤的。 ipad storyboard(風景)transmitter_box UITextView實際上是14,12(width = 990 height = 143) –

+0

我通過將聲明從.m移動到.h來解決x = 270的問題。 (我從Apple Dev的BTLE中央/外設傳輸中獲得了原始代碼,在.h和.m文件中都有@interface,這超出了我的透視級別。) –

+0

很酷。我仍然建議使用'NSLayoutConstraint'來指定你編程創建的UIViews相對於UITextView的位置。 –

0

層位於您UITextView內填充它的主人。

您要找的是您的控件的frametransmitter_box.frame.origin.x,transmitter_box.frame.origin.y

+0

我這樣做,但它仍然會返回0,0。 (代碼更新如上) 此外,它是一個TextView不是一個文本框,如果這很重要。 –

+0

真的嗎?一個減號?做什麼的? @ DouglasK.Bell你還應該檢查你的'textView'是否被初始化了,如果它沒有從storyboard正確鏈接的話,它可能不是。 –

+0

我認爲有人減去它是因爲它有'textfield'而不是'UITextView'。但我認爲評論會更有禮貌和尊重。 –

0

我沒有你的答案,幸運的是你已經找到了它。然而,你似乎偏離了Objective-C的命名約定。

@interface ataglance_central_controller 

應該是更像

@interface MYAtAGlanceCentralController 

類名應以大寫字母開始,(並與一些前綴)

+0

同意。我很匆忙(緊張的發展計劃)。但是,爲了便於閱讀,我喜歡在單詞之間插入一個空格(下劃線),這樣我就不會偏離英語的語法約定 - 英語是一種有點調試的通信系統。 ;-) –