2011-12-22 6 views
2

UITextFieldsとUITextViewsが混在するフォームを印刷したい場合は、実際のタイプに関係なくそれぞれ同じものを実行します。コードをきれいに保つため、ビュー配列の各項目を同じ変数に割り当てて、印刷パラメータを取得したいと考えています。私はタイプidの変数でこれを行うことができると思ったが、私はコンパイルするものにはヒットしなかった。以下のコードはコンパイルされませんが、私がしたいことを示しています。これを正しく行う方法を教えてくれる人に感謝します。UITextViewまたはUITextFieldを参照できるポインター

id theField; 

    //for each field on the page 
    for (j = offsetToFirstFormField; j < [self.fields count]; j++) { 

     theField = [self.fields objectAtIndex: j]; 
     printStr = theField.text; 
     if ([printStr length] > 0) { 

      theFont = [theField font]; 
      maxSize = CGSizeMake(theField.frame.size.width, theField.frame.size.height); 
      printStrSize = [printStr sizeWithFont:theFont constrainedToSize:maxSize lineBreakMode:UILineBreakModeClip]; 
      printRect = CGRectMake((theField.frame.origin.x * xScale) + xOffset, (theField.frame.origin.y * yScale) + yOffset, printStrSize.width, printStrSize.height); 
      [printStr drawInRect:printRect withFont:theFont]; 
     } 
    } 

答えて

1

id変数でドット構文を使用することはできません。あなたはメッセージ送信構文に固執する必要があります。これに

printStr = theField.text; 

:たとえば、あなたがこの変更しなければならないことは、それが解決しない場合は

printStr = [theField text]; 

を、あなたの質問やペーストは、あなたが取得している実際のエラーメッセージで編集します。

+0

ありがとうございます!それはそれを修正した。 –

0

印刷可能な機能をプロトコルでカプセル化します。したがってidではなくid<Printable>を使用します。プロトコルにはgetTextgetFontのようなメソッドがあります。カテゴリを使用して既存のクラスを拡張することもできます。

関連する問題