1. Список говнокодов пользователя QuickNick

    Всего: 19

  2. Objective C / Говнокод #13104

    −96

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    - (void) rotate: (BOOL) isPortrait andTabToolsPosition:(BOOL) _isPanelOnTop andHasChords:(BOOL) _hasChords
    {
        isPanelOnTop = _isPanelOnTop;
        hasChords = _hasChords;
    	isPortraitOrientation = isPortrait;
    	self.frame = isPortraitOrientation ? ((!isPanelOnTop && hasChords) ? 
                         CGRectMake(roundf(([[UIScreen mainScreen] bounds].size.width - 260)/2), 120, 260, 201):
                         CGRectMake(roundf(([[UIScreen mainScreen] bounds].size.width - 260)/2), 90, 260, 201)) : 
                         CGRectMake(roundf(([[UIScreen mainScreen] bounds].size.height - 260)/2), (_isPanelOnTop)? 45:20, 260, 201);
    	printTableView.frame = isPortraitOrientation ? CGRectMake(0, 30, 260, 170) : CGRectMake(0, 30, 260, 170);
    	[printTableView reloadData];
    }

    В старом проекте можно открыть любой контроллер или вьюху, у которой есть метод, связанный с ротацией. В нем обязательно какой-нибудь ад будет написан.

    QuickNick, 04 Июня 2013

    Комментарии (12)
  3. Objective C / Говнокод #13078

    −108

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    - (void) fixUIAfterRotation: (UIInterfaceOrientation) interfaceOrientation
    {
    	[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:UIInterfaceOrientationIsPortrait(interfaceOrientation)? @"bg_new.png":@"bg_new_90.png"]]];
      	NSString *path = [[NSBundle mainBundle] bundlePath];
    	NSURL *baseURL = [NSURL fileURLWithPath:path];
    	NSString *htmlStr;
    	webError = NO;
        orient = UIInterfaceOrientationIsPortrait(interfaceOrientation)? 1:2;
        float width_ = [[UIScreen mainScreen] bounds].size.height;
        viewNews.frame = isRotation? (UIInterfaceOrientationIsPortrait(interfaceOrientation)? 
               CGRectMake(0, 0, width_, 240):CGRectMake(0, 0, width_, width_ - 90)):(UIInterfaceOrientationIsPortrait(interfaceOrientation)? CGRectMake(0, 0, 320, width_ - 81):CGRectMake(0, 0, width_, 240));
        isRotation = isRotation? NO:isRotation;
        
    #if defined(PRO_PROJECT)    
     	if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
    	{
    		htmlStr = [NSString stringWithFormat:@"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" 
                              \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\">
                               <head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>Untitled Document</title>
                               <style>body {margin:0px; padding:0px; font:13px arial; background:none;}
                               a {text-decoration:underline; color:#fbcf04; font-weight:bold; !important;} a:hover {text-decoration:none;}
                               .title{background:#575757 left top repeat-x; font:bold 15px Arial; color:#FFF; padding:14px 30px 0px 0px; height:31px; 
                               border-bottom:1px solid #000000; line-height:14px}.titleIm{background:#575757 left top repeat-x; padding:13px 8px 13px 13px; height:31px; 
                               border-bottom:1px solid #000000;}.news_body {border-top:1px solid #414141; padding:10px 14px 14px 14px; 
                               color:#FFF; line-height:19px; background:#3d3d3d;}.news_body p {padding-top:0px;}</style></head>
                              <body><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"320\" height=\"388\"><tr><td width=\"75\" valign=\"top\" class=\"titleIm\">
                              <img src=%@ height=\"70\" width=\"70\"></td><td valign=\"top\" class=\"title\">%@ 
                              <div style=\"font:11px Arial; color:#858585; line-height:18px;\">%@</div></td></tr><tr>
                              <td colspan=\"2\" valign=\"top\" class=\"news_body\">%@</td></tr></table></body></html>",
                               imageName, [newsDescription objectForKey:@"titleNews"], 
                               [CORENewsTitleList getDataString:[newsDescription objectForKey:@"dateNews"]], 
                               [newsDescription objectForKey:@"discriptionNews"]];
    	}
    	else
    	{
    		htmlStr = [NSString stringWithFormat:@"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" 
                              \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\">
                             <head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>Untitled Document</title>
                             <style>body {margin:0px; padding:0px; font:13px arial; background:none;}
                             a {text-decoration:underline; color:#fbcf04; font-weight:bold; !important;}a:hover {text-decoration:none;}
                             .title {background:#575757 left top repeat-x; font:bold 15px Arial; color:#FFF; padding:14px 30px 0px 0px; height:31px; 
                              border-bottom:1px solid #000000; line-height:14px}.titleIm {background:#575757 left top repeat-x; padding:13px 8px 13px 13px; height:31px; 
                              border-bottom:1px solid #000000;}.news_body {border-top:1px solid #414141; padding:10px 14px 14px 14px; 
                              color:#FFF; line-height:19px; background:#3d3d3d;}.news_body p {padding-top:0px;}</style></head>
                              <body><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"%f\" height=\"240\"><tr><td width=\"75\" valign=\"top\" class=\"titleIm\">
                              <img src=%@ height=\"70\" width=\"70\"></td><td valign=\"top\" class=\"title\">%@ 
                              <div style=\"font:11px Arial; color:#858585; line-height:18px;\">%@</div></td></tr><tr>
                              <td colspan=\"2\" valign=\"top\" class=\"news_body\">%@</td></tr></table></body></html>",
                              width_, imageName, [newsDescription objectForKey:@"titleNews"], 
                              [CORENewsTitleList getDataString:[newsDescription objectForKey:@"dateNews"]], 
                              [newsDescription objectForKey:@"discriptionNews"]];
    	}
    #else
        if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
    	{
                    // тот же упоротый код, что и выше, за исключением цветов для бэкграунда и надписей.
            }
    	else
    	{
                    // тот же упоротый код, что и выше, за исключением цветов для бэкграунда и надписей.
    	}
    #endif
    	[viewNews loadHTMLString:htmlStr baseURL:baseURL];
    }

    Поворачиваем вебвью во вью-контроллере, который может использоваться в 2 проектах, имеющих различные темы (отличается бэкграунд и цвет надписей).

    QuickNick, 30 Мая 2013

    Комментарии (36)
  4. Objective C / Говнокод #12901

    −81

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    @implementation CheckButton
    @synthesize isChecked;
    -(id) initWithFrame:(CGRect)frame
    {
    	if (self = [super initWithFrame:frame])
    	{
    		[self addTarget:self action:@selector(checkBoxClicked:) forControlEvents:UIControlEventTouchUpInside];
    	}
    	return self;
    }
    -(void) setState:(BOOL)checked
    {
    	if (self.tag == 1)
    	{
    		if (checked)
    		{
    			[self setImage:[UIImage imageNamed: @"simple_act.png"] forState:UIControlStateNormal];
    		}
    		else
    		{
    			[self setImage:[UIImage imageNamed: @"simple_noact.png"] forState:UIControlStateNormal];
    		}
    	}
    	else
    		if (self.tag == 2)
    		{
    			if (checked)
    			{
    				[self setImage:[UIImage imageNamed: @"pro_act.png"] forState:UIControlStateNormal];
    			}
    			else
    			{
    				[self setImage:[UIImage imageNamed: @"pro_noact.png"] forState:UIControlStateNormal];
    			}
    		}
    		else
    			if (self.tag == 3)
    			{
    				if (checked)
    				{
    					[self setImage:[UIImage imageNamed: @"all_act.png"] forState:UIControlStateNormal];
    				}
    				else
    				{
    					[self setImage:[UIImage imageNamed: @"all_noact.png"] forState:UIControlStateNormal];
    				}
    			}
    	isChecked = checked;
    }
    -(void) checkBoxClicked:(id)sender
    {
    	if (self.isChecked)
    		return;	
    	if (self.tag == 1)
    	{
    		if (self.isChecked)
    		{
    			[self setImage:[UIImage imageNamed: @"simple_noact.png"] forState:UIControlStateNormal];
    		}
    		else
    		{
    			[self setImage:[UIImage imageNamed: @"simple_act.png"] forState:UIControlStateNormal];
    		}
    	}
    	else
    		if (self.tag == 2)
    		{
    			if (self.isChecked)
    			{
    				[self setImage:[UIImage imageNamed: @"pro_noact.png"] forState:UIControlStateNormal];
    			}
    			else
    			{
    				[self setImage:[UIImage imageNamed: @"pro_act.png"] forState:UIControlStateNormal];
    			}
    		}
    		else
    			if (self.tag == 3)
    			{
    				if (self.isChecked)
    				{
    					[self setImage:[UIImage imageNamed: @"all_noact.png"] forState:UIControlStateNormal];
    				}
    				else
    				{
    					[self setImage:[UIImage imageNamed: @"all_act.png"] forState:UIControlStateNormal];
    				}
    			}
    	isChecked = !isChecked;
    }

    Подклассим UIButton для того, чтобы в зависимости от состояния выделенности кнопки менять ей image.

    QuickNick, 16 Апреля 2013

    Комментарии (5)
  5. Objective C / Говнокод #12881

    −102

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    @interface CORERatingImages : NSObject
    {
        UIImage *imageForOne;
        UIImage *imageForTwo;
        UIImage *imageForThree;
        UIImage *imageForFour;
        UIImage *imageForFive;
    }
    +(CORERatingImages *) ratingImages;
    -(UIImage *) getRatingImage:(int) ratings;
    @property (nonatomic, retain) UIImage *imageForOne;
    @property (nonatomic, retain) UIImage *imageForTwo;
    @property (nonatomic, retain) UIImage *imageForThree;
    @property (nonatomic, retain) UIImage *imageForFour;
    @property (nonatomic, retain) UIImage *imageForFive;
    -(void) releaseResources;
    @end
    
    static CORERatingImages *ratingImages = nil;
    
    @implementation CORERatingImages
    @synthesize imageForOne;
    @synthesize imageForTwo;
    @synthesize imageForThree;
    @synthesize imageForFour;
    @synthesize imageForFive;
    
    +(CORERatingImages *) ratingImages
    {
        @synchronized(self)
        {
            if (ratingImages == nil)
            {
                ratingImages = [[self alloc] init];
            }
        }
        return ratingImages;
    }
    -(id) init
    {
        if (self = [super init])
        {
            self.imageForOne = [UIImage imageNamed:@"1.png"];
            self.imageForTwo = [UIImage imageNamed:@"2.png"];
            self.imageForThree = [UIImage imageNamed:@"3.png"];
            self.imageForFour = [UIImage imageNamed:@"4.png"];
            self.imageForFive = [UIImage imageNamed:@"5.png"];
        }
        return self;
    }
    -(UIImage *) getRatingImage:(int) ratings
    {
        if (ratings == 1)
        {
            return imageForOne;
        }
        else if (ratings == 2)
        {
            return imageForTwo;
        }
        else if (ratings == 3)
        {
            return imageForThree;
        }
        else if (ratings == 4)
        {
            return imageForFour;
        }
        else if (ratings == 5)
        {
            return imageForFive;
        }
        else
        {
            return [UIImage imageNamed:@"0.png"];
        }
    }
    -(void) dealloc
    {
        NSLog(@"release Images");
        [imageForOne release];
        [imageForTwo release];
        [imageForThree release];
        [imageForFour release];
        [imageForFive release];
        [super dealloc];
    }
    -(void) releaseResources
    {
        [ratingImages release];
        ratingImages = nil;
    }
    
    @end

    Массив или stringWithFormat: @"%d.png"?

    Не, не слышал.

    QuickNick, 11 Апреля 2013

    Комментарии (15)
  6. Objective C / Говнокод #12804

    −116

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    - (id) init
    {
        self = [super init];
        if (self)
        {
            // выкинул лишний код
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:nil object:nil];
        }
        return self;    
    }
    
    - (void)receiveNotification:(NSNotification*)notification
    {
        if ([[notification name] isEqualToString:UpdateSubscribeState])
        {
            [self hideProgress];        
            NSMutableDictionary *dict = [notification object];
            if ([dict objectForKey:@"userId"] != nil && [[dict objectForKey:@"userId"] intValue] == 0 && [subscriptionManager getSubscriptionState])
            {
                [self performSelector:@selector(showAccountView) withObject:nil afterDelay:0.05f];
                return;
            }        
            if (isSubscription == [subscriptionManager getSubscriptionState])
            {
                [self updateSubscriptionView:[notification object]];
                return;
            }
            if ([subscriptionManager getRequestState] == RequestBuy || [subscriptionManager getRequestState] == RequestRestore)
            {
                [self performSelector:@selector(reloadView) withObject:nil afterDelay:0.05f];
            }
            else
            {
                [self updateSubscriptionView:[notification object]];
            }
        }
        else if ([[notification name] isEqualToString:GetError])
        {
            [self hideProgress];
            if ([notification object] != nil)
            {
                [errorMessages setMessageData:[[notification object] objectForKey:@"title"] text:[[notification object] objectForKey:@"message"] tag:0];
                [errorMessages showMessage];
            }
        }
    }
    
    -(void) reloadView
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:HideSubscribeView object:nil userInfo:nil];
        [self performSelector:@selector(redrawView:) withObject:nil afterDelay:0.35f];
    }
    
    -(void) redrawView:(id) selector
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:ShowSubscribeView object:nil userInfo:nil];
    }

    Это в проекте встретилось несколько разрушительных сил:
    1. Извращения архитектора (меня).
    2. Непонимание задумки архитектора автором (другой человек).
    3. Приверженность старым методам связи компонентов.
    4. Де-факто лид (я) не ревьюил код.
    5. Адско кастомный дизайн, скормленный несработавшейся и неотлаженной на тот момент команде.

    QuickNick, 25 Марта 2013

    Комментарии (13)
  7. Objective C / Говнокод #12656

    −83

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    @interface PlayerSettings : UIImageView <UIScrollViewDelegate>
    // объявление полей и методов
    @end
    
    @implementation PlayerSettings
    
    -(id)init
    {    
    	self = [super init];
    	if (self)
    	{
            SETTINGS_W_HEIGHT = 276;
            SETTINGS_W_WIDTH = [[UIScreen mainScreen] bounds].size.height;
    		[self loadView];
    	}
    	return self;
    }
    
    -(void) loadView
    {
            self.frame = CGRectMake(0.0, 640.0, SETTINGS_W_WIDTH, SETTINGS_W_HEIGHT);
            self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"some_bg.png"]];
            self.userInteractionEnabled = YES;
    	
            isTrackChanging = NO;
            activeTrackIndex = 0;
    	svTracks = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, SETTINGS_W_WIDTH, SETTINGS_W_HEIGHT)];
    	svTracks.contentSize = CGSizeMake(SETTINGS_W_WIDTH, SETTINGS_W_HEIGHT);
    	svTracks.backgroundColor = [UIColor clearColor];
    	svTracks.clipsToBounds = YES;
    	svTracks.bounces = NO;
    	svTracks.delegate = self;
    	[self addSubview:svTracks];
    	[svTracks release];
    	
    	//CGAffineTransform transform = CGAffineTransformMakeRotation(3.14159/2);
    	//self.view.transform = transform;
    	
    	//self.view.center = CGPointMake(-SETTINGS_W_HEIGHT/2.0, 240.0);//CGPointMake(-SETTINGS_W_HEIGHT/2.0, 240.0);
    }
    
    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
    	return YES;//(interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    
    @end

    А зачем вообще удалять старый код?

    QuickNick, 27 Февраля 2013

    Комментарии (26)
  8. Java / Говнокод #12615

    +67

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    public final class SomeActivity extends Activity {
           @Override
    	protected Dialog onCreateDialog(int id) {
    		Dialog dialog = null;
    		if (id == DialogGenerator.SETTINGS_DIALOG) {
    			dialog = mDialogGenerator.createSettingsDialog();
    		}  {
    			dialog = super.onCreateDialog(id);
    		}
    		return dialog;
    	}
    
    	@Override
    	protected void onPrepareDialog(int id, Dialog dialog) {
    		super.onPrepareDialog(id, dialog);
    		if (id == DialogGenerator.SETTINGS_DIALOG) {
    			mDialogGenerator.prepareSettingsDialog((AlertDialog) dialog, someBoolValue, someObjectValue);
    		} 
    	}
    }
    
    public final class DialogGenerator {
    	public Dialog createSettingsDialog() {
    		int dialogId = SETTINGS_DIALOG;
    		int titleId = R.string.settingsTitle;
    		String[] itemsArray = getStringArray(R.array.settings);
    		ThreeTypeOptionsAdapter adapter = new ThreeTypeOptionsAdapter(mControllerAsActivity, itemsArray,
    				mCheckableOptions, mTwoTextOptions);
    		AlertDialogCallback dialogCallback = new AlertDialogCallback(mControllerAsDialogHost, dialogId);
    		AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mControllerAsActivity);
    		dialogBuilder.setTitle(titleId);
    		// костыль
    		dialogBuilder.setSingleChoiceItems(itemsArray, 0, null);
    		// конец костыля
    		dialogBuilder.setAdapter(adapter, dialogCallback);
    		AlertDialog dialog = dialogBuilder.create();
    		setMainListenersOnDialog(dialog);
    		dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    		return dialog;
    	}
    	
    	public void prepareSettingsDialog(AlertDialog dialog, boolean someBoolValue, String someStringValue) {
    		//костыль
    		ListView dialogList = dialog.getListView();
    		dialogList.clearChoices();
    		dialogList.setItemChecked(POSITION_FOR_BOOL, someBoolValue);
    		//конец костыля
    		ThreeTypeOptionsAdapter adapter = (ThreeTypeOptionsAdapter) dialogList.getAdapter();
    		adapter.setAdditionalValue(POSITION_FOR_STRING, someStringValue);	
    	}
    }

    Задача: показать диалог, внутри которого есть 3 типа ячеек: выделяемые с чекбоксом справа, невыделяемые с дополнительной надписью справа, обычные невыделяемые.
    Примерно так:
    Use GPS checkbox
    Selected country Russia
    Launch some activity

    В комментах к методам я описал костыль:
    Здравствуйте, дорогие друзья. Сегодня мы с вами поговорим об уникальном виде животных, которых открыли только в конце XX века. Это, дорогие друзья, Ява-обезьяны. Давайте дружно откроем сырцы Андроид-СДК, а именно - класс com.android.internal.app.AlertController .AlertParams - и метод createListView(AlertController). Видите, одна обезьяна решила, что нам будет удобней, если диалог автоматом задисмиссится, когда мы щёлкнем по элементу списка в CHOICE_MODE_NONE, и OnClickListener будет не null? А теперь давайте перейдём в android.app.AlertDialog.Builder. Видите, там другая обезьяна решила, что для multi-choice списка нам не потребуется хитроумный адаптер? Поэтому, дорогие друзья, когда мы поставили кастомный адаптер (setAdapter()) и сопроводили его слушателем, то какой бы мы choice mode не ставили после AlertDialog.Builder.create(), диалог дисмиссился. Поэтому, дорогие друзья, пришлось пойти на хитрость и вначале установить single choice (чтобы флаг mIsSingleChoice стал true), а потом уже ставить адаптер.

    QuickNick, 20 Февраля 2013

    Комментарии (48)
  9. Objective C / Говнокод #12416

    −107

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {	
    	return 6;
    }
    
    -(UITableViewCell *) tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    	static NSString *kCellIdentifier = @"";
    	switch (indexPath.row) 
    	{
    		case 0:
    			kCellIdentifier = @"SpaceCell";
    			break;
    		case 1:
    			kCellIdentifier = @"LoginCell";
    			break;
    		case 2:
    			kCellIdentifier = @"PasswordCell";
    			break;
    		case 3:
    			kCellIdentifier = @"EmailCell";
    			break;
    		case 4:
    			kCellIdentifier = @"BirhtdayCell";
    			break;
    		default:
    			kCellIdentifier = @"ForgotCell";
    			break;
    	}
    	UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:kCellIdentifier] autorelease];
    	cell.selectionStyle = UITableViewCellSelectionStyleNone;
    	cell.backgroundColor = [UIColor clearColor];
    	cell.backgroundView.backgroundColor = [UIColor clearColor];
    
    	if (indexPath.row == 1)
    	{
    		[self backgroundCells:cell fileImage:@"top_downlayer.png"];
    		self.loginTextField.text = userName;
    		self.loginTextField.placeholder = @"User Name";
    		self.loginTextField.frame = CGRectMake(10.0f, 10.0f, 300.0f, 30.0f);
    		[cell.contentView addSubview:self.loginTextField];
    	}
    	else if (indexPath.row == 2)
    	{
    		[self backgroundCells:cell fileImage:@"middle_downlayer.png"];
    		self.passwordTextField.text = password;
    		self.passwordTextField.placeholder = @"Password";
    		self.passwordTextField.frame = CGRectMake(10.0f, 8.0f, 300.0f, 30.0f);
    		[cell.contentView addSubview:self.passwordTextField];
    	}
    	else if (indexPath.row == 3)
    	{
    		[self backgroundCells:cell fileImage:@"middle_downlayer.png"];
    		self.email.text = emailString;
    		self.email.placeholder = @"Email";
    		self.email.frame = CGRectMake(10.0f, 7.0f, 300.0f, 30.0f);
    		[cell.contentView addSubview:self.email];
    	}
    	else if (indexPath.row == 4)
    	{
    		[self backgroundCells:cell fileImage:@"middle_downlayer.png"];
    		UIImageView *inputIV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"input_login.png"]];
    		inputIV.frame = CGRectMake(20, 8, 280, 28);
    		[inputIV setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    		[cell addSubview:inputIV];
    		[inputIV release];
    						
    		if (![resultsDate.text length])
    		{
    			UILabel *birhtdayLabel = [[UILabel alloc] initWithFrame:CGRectMake(29, 12, 150, 20)];
    			birhtdayLabel.text = @"Birthday";
    			[birhtdayLabel setTextAlignment:UITextAlignmentLeft];
    			[birhtdayLabel setFont: [UIFont fontWithName:@"Arial" size:17.0f]];
    			[birhtdayLabel setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.25]];
    			[birhtdayLabel setHighlightedTextColor:[UIColor whiteColor]];
    			[birhtdayLabel setBackgroundColor:[UIColor clearColor]];
    			[birhtdayLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    			[cell addSubview:birhtdayLabel];
    			[birhtdayLabel release];
    		}
    		else
    			[cell addSubview:resultsDate];
    	}
    	else if (indexPath.row == 5)
    	{
    		[self backgroundCells:cell fileImage:@"down_downlayer.png"];
    		UIImage *buttonBackgroundPressed = [UIImage imageNamed:@"search_btn_act.png"];
    		UIImage *buttonBackground = [UIImage imageNamed:@"search_btn.png"];
    		UIButton *singUpButton = [CustomButton buttonWithTitle:@"SIGN UP" target:self selector:@selector(singUpTouchAction:) frame:CGRectMake(20, 6, 280, 28) image:buttonBackground imagePressed:buttonBackgroundPressed];
    		singUpButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    		singUpButton.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    		[cell addSubview:singUpButton];
    	}
    	return cell;
    }

    Старый проект. Открыл класс наугад.

    Так кто-то строил форму для регистрации юзера. Каждое поле в форме - уникально.

    QuickNick, 14 Января 2013

    Комментарии (4)
  10. Objective C / Говнокод #12370

    −110

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    - (void) viewDidAppear: (BOOL) animated
    {
        [super viewDidAppear:animated];
        self.tabBarController.tabBar.userInteractionEnabled = YES;
        if (wasAppearFromChild) {
            [super viewWillAppear:animated];
            wasAppearFromChild = NO;
            return;
        }
        goToLastBarNeed = NO;
        if ([delegate isNeedFullUpdate]) //проверяем, нужно ли полное обновление
        {
            if ([delegate isNetworkAvaliable])
            {
                ///тут вызываем полное обновление         
                [delegate showProgressBar];
                [self performSelectorInBackground:@selector(updateLoop) withObject:nil];
                [self performSelector:@selector(progressLoop) withObject:nil];
            }
            else 
            {
                //тут выдаём ошибку про интернет или распаковываем то, что есть
                if (![delegate isTabListExist]) {
                    goToLastBarNeed = YES;
                    [delegate displayAlertOnNetworkError];
                    return;
                }
                else 
                {
                    if ([delegate packTypeCount] == 0) {
                        [delegate showIndicatorView:@"Loading"];           
                        [self performSelectorInBackground:@selector(updateLoop) withObject:nil];
                    }
                }
            }        
        }
        else 
        {   //если попали сюда впервые, то смотрим, не нужно ли обновиться после 24-х часов и либо обновляемся, либо распаковываемся     
            if ([delegate packTypeCount] == 0) 
            {
                if ([delegate isNetworkAvaliable])
                {
                    if ([delegate is24HoursPass]) 
                    {
                        [delegate showIndicatorView:@"Updating"];
                    }
                    else 
                    {
                        [delegate showIndicatorView:@"Loading"];
                    }                
                }
                else 
                {
                    [delegate showIndicatorView:@"Loading"];            
                }            
                [self performSelectorInBackground:@selector(updateLoop) withObject:nil];
            }
        } 
        [super viewWillAppear:animated];
    }
    
    - (void) updateLoop 
    {	
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        self.view.userInteractionEnabled = NO;		
        [delegate setHasTabPacksResult:NO];    
    	[delegate downloadTabPacks];
    	[self performSelectorOnMainThread:@selector(updateLoop1) withObject:nil waitUntilDone:YES];    
    	[pool release];
    }

    По ходу, опять мой любимый автор.

    QuickNick, 27 Декабря 2012

    Комментарии (19)
  11. Objective C / Говнокод #12292

    −113

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    -(void) reloadHelpMessage:(BOOL) _isPortrait
    {
        //ignoreDisappear = NO;
        //ingnoreWillAppear  = NO;
        if (_isPortrait)
        {
            helpMessage.frame = CGRectMake(helpMessage.frame.origin.x, helpMessage.frame.origin.y, self.view.bounds.size.width, 175);
            for (UIView* sub in [helpMessage subviews])
            {
                NSLog(@"__%@",[sub description]);
                switch (sub.tag) 
                {
                    case 1:
                        sub.frame = CGRectMake(68, 17, 200, 18);
                        break;
                    case 2:   
                        sub.frame = CGRectMake(68, 40, self.view.bounds.size.width - 70, 80);
                        break;
                    case 3:
                        sub.frame = CGRectMake(267, 3, 35, 29);
                        break;
                    case 4:
                        sub.frame = CGRectMake(10, 8, 48, 53);
                        break;
                    case 5:
                        sub.frame = CGRectMake(11, 128, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                    case 6:
                        sub.frame = CGRectMake(roundf((self.view.bounds.size.width/2) + 5), 128, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                   
                    default:
                        break;
                }   
            }
        }
        else
        {
            helpMessage.frame = CGRectMake(helpMessage.frame.origin.x, helpMessage.frame.origin.y, self.view.frame.size.width, 138);
            for (UIView* sub in [helpMessage subviews])
            {
                NSLog(@"__%@",[sub description]);
                switch (sub.tag) 
                {
                    case 1:
                        sub.frame = CGRectMake(68, 17, 200, 18);
                        break;
                    case 2:   
                        sub.frame = CGRectMake(68, 40, self.view.bounds.size.width - 80, 40);
                        break;
                    case 3:
                        sub.frame = CGRectMake(400, 3, 35, 29);
                        break;
                    case 4:
                        sub.frame = CGRectMake(10, 8, 48, 53);
                        break;
                    case 5:
                        sub.frame = CGRectMake(11, 91, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                    case 6:
                        sub.frame = CGRectMake(roundf((self.view.bounds.size.width/2) + 5), 91, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                    default:
                        break;
                }   
            }
        }
    }

    QuickNick, 14 Декабря 2012

    Комментарии (47)