0

現在、テキストビューが入ったアラートビューを使用していますが、iPhone を横向きに回転させると奇妙なことが起こり、アラートビューに別のテキストビューが表示されるようです。この問題は iPad では発生しません。誰がこれを引き起こしているのか知っていますか? アドバイスや助けをいただければ幸いです。

私のコードはアプリデリゲートに配置され、以下にリストされています。

- (IBAction) loadAboutUs 
{
UIAlertView *showSelection;
showSelection.delegate = self;
NSString *key = [NSString stringWithFormat: @"Drug Tariff\n"
@"Version: %@\n"
@"text\n\n"
@"text\n"
@"text\n"
@"text", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]];
showSelection = [[UIAlertView alloc] 
                 initWithTitle: @""
                 message: @"\n\n\n\n\n\n\n\n\n\n"//The new lines are used to increase the size of the pop-up
                 delegate: nil 
                 cancelButtonTitle: @"OK" 
                 otherButtonTitles: nil];

//The text view inserted into the alertview 
UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(12.0, 15.0, 260.0, 210.0)];
myTextView.text = key;
myTextView.dataDetectorTypes = UIDataDetectorTypeAll;//set the textview to pick up all link types
[myTextView setFont:[UIFont fontWithName:@"ArialMT" size:16]];
myTextView.textAlignment = UITextAlignmentCenter; 
myTextView.editable = false;//the textview needs to be uneditable for the dataDectector to work
myTextView.scrollEnabled = true;
[myTextView setBackgroundColor:[UIColor whiteColor]];
[showSelection addSubview:myTextView];

[showSelection show];
}

問題の画像を添付しましたが、

アラートビューの問題

アップデート:

以下のコードを実行したときに得られる出力

NSArray *subviews = [showSelection subviews];
for (UIView *view in subviews)
{
    NSLog(@"class %@, tag: %i", [view class], view.tag);
} 

Landscape
2012-06-18 17:56:43.906 TS Data[6513:b903] class UIImageView, tag: 0
2012-06-18 17:56:43.907 TS Data[6513:b903] class UILabel, tag: 0
2012-06-18 17:56:43.908 TS Data[6513:b903] class UILabel, tag: 0
2012-06-18 17:56:43.908 TS Data[6513:b903] class UIThreePartButton, tag: 1
2012-06-18 17:56:43.909 TS Data[6513:b903] class UITextView, tag: 1000
2012-06-18 17:56:43.910 TS Data[6513:b903] class UIAlertTextView, tag: 12345
2012-06-18 17:56:43.910 TS Data[6513:b903] class UIImageView, tag: 3334

Portrait
2012-06-18 17:56:38.035 TS Data[6513:b903] class UIImageView, tag: 0
2012-06-18 17:56:38.053 TS Data[6513:b903] class UILabel, tag: 0
2012-06-18 17:56:38.054 TS Data[6513:b903] class UILabel, tag: 0
2012-06-18 17:56:38.055 TS Data[6513:b903] class UIThreePartButton, tag: 1
2012-06-18 17:56:38.055 TS Data[6513:b903] class UITextView, tag: 1000
4

4 に答える 4

1

UIAlertView を初期化するときに「メッセージ」プロパティを変更するだけで済みます。

showSelection = [[UIAlertView alloc] 
             initWithTitle: @""
             message: @""
             delegate: nil 
             cancelButtonTitle: @"OK" 
             otherButtonTitles: nil];

UIAlertView のサイズを変更する場合は、View Controller で次のコードを使用できます。

- (void) willPresentAlertView:(UIAlertView *)alertView
{
    alertView.frame = CGRectMake(0, 0, 150, 250);
}
于 2012-07-26T07:13:37.833 に答える
0

iPhone の横向きモードで alertView フレームが変わります。向きの textField フレームを変更することで、手動で処理しました。

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
   if (((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone))
   {
        yourTextField.frame = CGRectMake(20.0, 32.0, 245.0, 25.0);
   }
   else
   {
        yourTextField.frame = CGRectMake(20.0, 45.0, 245.0, 25.0);
   }
}
于 2012-06-18T16:07:32.850 に答える
0

これを解決するには、次の 3 つのオプションがあります。

  1. 回転に合わせてフレームを手動で設定します。「Warif Akhand Rishi」の回答のように
  2. alertview が存在する場合は、ビューの回転を許可しないでください。(shouldAutoRotateToInterfaceOrientation メソッドから NO を返す)
  3. インターフェイスが変更されているときにアラート ビューを閉じ、ビューの回転後に表示します。少量のコードが必要です。textField に何かがある場合は、それを一時的に保存して再度表示する必要があります。

私は自分のプロジェクトで同じ問題に直面しましたが、その時点で 2 番目のオプションを選択しました。

于 2012-06-20T19:00:11.313 に答える
0

追加:

myTextView.tag = 1000 //number here does not matter as long as it is not 0

次に、 myTextView を初期化する前に、タグ 1000 のビューが存在するかどうかを確認します。

if (![showSelection viewWithTag:1000]){//if that view is not there add it, if not, it is there ;)
 UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(12.0, 15.0, 260.0, 210.0)];
 myTextView.tag = 1000
 myTextView.text = key;
 myTextView.dataDetectorTypes = UIDataDetectorTypeAll;//set the textview to pick up all link types
 [myTextView setFont:[UIFont fontWithName:@"ArialMT" size:16]];
 myTextView.textAlignment = UITextAlignmentCenter; 
 myTextView.editable = false;//the textview needs to be uneditable for the dataDectector to work
 myTextView.scrollEnabled = true;
 [myTextView setBackgroundColor:[UIColor whiteColor]];
 [showSelection addSubview:myTextView];
}
于 2012-06-18T14:31:21.447 に答える