2011-01-10 10 views
2

海のすべて...私はuipagecontrollerインジケータ(ドット)の色を変更したいuipagecontrolインジケータ(ドット)問題

...そのために私は、以下の手順をやっています。

は、2つの方法

1.- (void) setCurrentPage:(NSInteger)page

2.- (void) setNumberOfPages:(NSInteger)pages

- (void) setCurrentPage:(NSInteger)page 
{ 
    NSLog(@"setCurrentPage"); 
    [super setCurrentPage:page]; 
    NSString* imgActive = [[NSBundle mainBundle] pathForResource:@"activeimage" ofType:@"png"]; 
    NSString* imgInactive = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"]; 
    for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++) 
    { 
     UIImageView* subview= [self.subviews objectAtIndex:subviewIndex]; 

     if (subviewIndex == page) 
      [subview setImage:[UIImage imageWithContentsOfFile:imgActive]];   
     else 
      [subview setImage:[UIImage imageWithContentsOfFile:imgInactive]];   

     subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10); 
    } 
} 


- (void) setNumberOfPages:(NSInteger)pages 
{ 
    NSLog(@"setNumberOfPages"); 
    [super setNumberOfPages:pages]; 
    NSString* img = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"]; 
    for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++) 
    { 
     UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];    
     [subview setImage:[UIImage imageWithContentsOfFile:img]];   
     subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10); 
    } 
} 

はすでに私がpagecontrolとscrollviewと1つのビューを持っていてPageControlという名前の新しいクラスを作成します...ここで私がやっているのは、ペン先からuipagecontrollerを選択し、アイデンティティ・インスペクタを選択し、イメージをスワイプしながら色を変更するために機能するクラス名PageControl(新しく作成された2つのクラス)を選択することですが、次のページに移動するためのpagecontrolをクリックするための...

私は私がやっている間違い含めたりしたいshoudかわからない...これを行うために私を助けてください...

ありがとう...

答えて

2

ドットのクリックでページスクロールを有効にする場合は、まずxibファイルの「値変更」プロパティをコードで設定したアクションに関連付ける必要があります。

私は自分のプロジェクトの1つで同じ機能を実装しているので、間違いなく機能します。

- (IBAction)changePage:(id)sender { 
int page = pageControl.currentPage; 
CGFloat pageWidth = scrollView.frame.size.width; 

pageWidth = scrollView.frame.size.width; 
pageControl.currentPage = page; 

CGRect frame = scrollView.frame; 
frame.origin.x = frame.size.width * page; 
frame.origin.y = 0; 
[scrollView scrollRectToVisible:frame animated:YES]; 

// Set the boolean used when scrolls originate from the UIPageControl. See scrollViewDidScroll: above. 

} 

乾杯

+0

ハイアーディティヤコーディングハッピー

が...私はすでに私のpreview.m class.preview.mクラスXIBでこのコードを書かれている私は「などのページ制御とchangePageアクションメソッドを接続していpagecontrolを持っていますvalue Changed "...ページコントロールのインジケーターを変更するための新しく作成されたクラスは、PageControl.openと呼ばれ、xControlのページコントロールとして呼び出され、PageControl、すなわち(新しく作成されたクラス名)としてクラス名を選択します。時間は、pagecontrolをクリックして次のページに移動します。通常のインジケータ(色なし)を表示しています...あなたのクイック返信には本当にありがとうございます... – kanmani

+1

このリンクはhttp://www.onidev。 com/2009/12/02/customizable-uipagecontrol/ – Aditya

+0

ええ、このリンクは私にもっと役立ちます...ありがとうAditya – kanmani

0

あなたの上記のコードはiOSの7.Iにクラッシュしているが、この問題の解決策を発見しました。私はそれが道ではないことを知っていますが、iOS 8が市場に投入されるまでは動作することを確かめてください。クラッシュのため

理由:iOSの7で

[self.subViews objectAtIndex: i]リターン代わりUIImageViewUIViewとsetImageはUIViewのアプリのクラッシュのプロパティではありません。私はこの次のコードを使用して私の問題を解決します。

サブビューがUIView(iOS7の場合)またはUIImageView(iOS6以前の場合)かどうかを確認してください。それがUIViewの場合は、そのビューにサブビューとしてUIImageViewを追加して、その作業とクラッシュしないようにします.. !!

-(void) updateDots 
{ 
    for (int i = 0; i < [self.subviews count]; i++) 
    { 
     UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]]; 
     if (i == self.currentPage) dot.image = activeImage; 
     else dot.image = inactiveImage; 
    } 
} 
- (UIImageView *) imageViewForSubview: (UIView *) view 
{ 
    UIImageView * dot = nil; 
    if ([view isKindOfClass: [UIView class]]) 
    { 
     for (UIView* subview in view.subviews) 
     { 
      if ([subview isKindOfClass:[UIImageView class]]) 
      { 
       dot = (UIImageView *)subview; 
       break; 
      } 
     } 
     if (dot == nil) 
     { 
      dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)]; 
      [view addSubview:dot]; 
     } 
    } 
    else 
    { 
     dot = (UIImageView *) view; 
    } 

    return dot; 
} 

これはiOS7の問題も解決します。もしAnyponeが最適解を見つけたらコメントしてください。 :)

関連する問題